首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python & Selenium / XING: find_element在迭代中第一次工作,而不是第二次

Python & Selenium / XING: find_element在迭代中第一次工作,而不是第二次
EN

Stack Overflow用户
提问于 2017-08-26 05:03:17
回答 1查看 112关注 0票数 0

现在已经有两天了:试图通过消息自动向搜索结果中的几个人发送联系请求。登录和搜索后,重复添加按钮即可工作,add_btn.click()将打开弹出窗口。但是,只有在第一个实例中,我才成功地try: find_element_by_name来访问<textarea name="reason">,并且可以执行element.send_keys()来插入我的消息。在第二次迭代中,我似乎无法访问消息表单,尽管当我打印driver.find_elements_by_xpath("//*[@name]")的迭代时,出现了<textarea name="reason">

我试图捕捉最常见的异常,但这似乎不起作用。

有没有人能解释一下,1)这里发生了什么,为什么对所有命名元素的调用可以列出文本区域,但我特定的查找它的调用不起作用,以及2)我如何解决这个问题。谢谢!

下面是我浏览搜索结果的代码的一部分:

代码语言:javascript
复制
def contact(text):
    add_btns=driver.find_elements_by_css_selector("a.searchResult-actionLink.foundation-icon-core-contact-add.contact-lightbox-link")     
    i=0
    wanted=6   
    for add_btn in add_btns:
       i+=1       
       try:
          add_btn.click()
          time.sleep(2)
          driver.save_screenshot("add%s.png" % (i,))        ###works on every turn!
          elems=driver.find_elements_by_xpath("//*[@name]")
          for elem in elems:
             print i, elem.tag_name, elem.get_attribute("name")  ###prints out 'textarea reason' on every turn!                      

          try:
             mssgbrd = driver.find_element_by_name("reason")
             print "mssgbrd found"                          ###prints only on first round???
             mssgbrd.send_keys(text)                                
             driver.save_screenshot("request%s.png" % (i,))             
          except ElementNotVisibleException:
              print "not visible"
          except StaleElementReferenceException:
              print "stale"              
          except NoSuchElementException:
              print "no such element"              
          except TimeoutException:
              print "timed out"
          except:
              print "something else happens"    


          request=driver.wait.until(EC.presence_of_element_located(
          (By.CSS_SELECTOR,"#crl-button-send-request > a.element-form-button-solid-lime"))) 
          try:
            request.click()
            time.sleep(3)            
          except TimeoutException:
             print("Button not found!")
             driver.save_screenshot("ButtonError%s.png" % (i,))

       except:
           print "Request not working"                      ###prints out on second round and after
           driver.save_screenshot("xibit%s.png" % (i,))     ###get's called on second round and after

当我运行这段代码时,在第一次成功迭代之后,对于所有其他迭代,我总是得到最后一个异常"Request not working“。我已经测试了close_button.click()关闭弹出窗口而不是发送请求-在这里第二次迭代是成功的。

EN

回答 1

Stack Overflow用户

发布于 2017-08-26 18:55:09

我仍然不能评估问题是什么,但这就是它是如何解决的。也许比我更有经验的人知道发生了什么。

在我的原始代码中,我在前面有一行text=unicode(text.decode("utf-8"))

代码语言:javascript
复制
try:
   mssgbrd = driver.find_element_by_name("reason")
   print "mssgbrd found"

为了简短起见,我在这里删掉了它,因为我认为它并不重要。天哪,我错了.在实验时,我添加了两个print time.ctime()实例,以了解可能的超时或等待时间;一个在utf-8解码和try:-block之间,另一个在关键mssgbrd = driver.find_element_by_name("reason")之后。

当运行代码时,在第二次迭代中它们都没有打印出来,这意味着代码在尝试mssgbrd = driver.find_element_by_name("reason")之前就停止了,只是解码发生了。然后,我将解码过程移到了函数的顶部,并成功地发送了两个invite消息。所以基本上,我的问题中的函数应该工作得很好,如果你要添加解码,第一行将如下所示:

代码语言:javascript
复制
def contact(text):
    text=unicode(text.decode("utf-8"))
    add_btns=driver.find_elements_by_css_selector("a.searchResult-actionLink.foundation-icon-core-contact-add.contact-lightbox-link")     
    i=0
    wanted=6   
    for add_btn in add_btns:
       i+=1       
       try:
          add_btn.click()
          time.sleep(2)
          driver.save_screenshot("add%s.png" % (i,))                    
          elems=driver.find_elements_by_xpath("//*[@name]")
          for elem in elems:
             print i, elem.tag_name, elem.get_attribute("name") 
          try:
             mssgbrd = driver.find_element_by_name("reason")
             print "mssgbrd found"                         
             mssgbrd.send_keys(text)                                
             driver.save_screenshot("request%s.png" % (i,))             
          except:

然而,我很想知道这里发生了什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45889384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档