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

时间:2017-08-25 21:03:17

标签: python selenium xing

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

我尝试捕捉最常见的例外情况,但这似乎不起作用。

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

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

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

当我运行此代码时,在第一次成功迭代之后,我不断为所有其他迭代获取最后一个异常“请求不工作”。我已经测试了close_button.click()关闭弹出窗口而不是发送请求 - 这里第二次迭代成功了。

1 个答案:

答案 0 :(得分:0)

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

在我的原始代码中,我在

之前有一行try: mssgbrd = driver.find_element_by_name("reason") print "mssgbrd found"
print time.ctime()

为了简洁起见,我在这里删除了它,因为我认为这不重要。男孩,我错了......在进行实验时,我添加了两个try:实例,以了解可能的超时或等待时间;一个恰好在utf-8解码和mssgbrd = driver.find_element_by_name("reason") - 块之间,一个在关键mssgbrd = driver.find_element_by_name("reason")之后。

运行代码时,在第二次迭代中没有打印出,这意味着代码在尝试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: 之前就已经以某种方式停止解码发生。然后我将解码移动到函数的顶部,并能够成功发送两个邀请消息。所以基本上,我的问题中的函数应该可以正常工作,如果你要添加解码,第一行看起来像这样:

data_json

但是,我很想了解这里发生的事情。