2017-08-25 131 views
0

现在两天就开始了:试图自动将联系请求发送给搜索结果中的多个人并附带消息。在登录和搜索之后,重复添加按钮的工作和add_btn.click()打开弹出窗口。然而,只是在第一种情况下,我成功地通过try:find_element_by_name来访问<textarea name="reason">并且可以做element.send_keys()来插入我的消息。在第二次迭代中,我似乎无法访问邮件表单,但是,当我打印driver.find_elements_by_xpath("//*[@name]")<textarea name="reason">的迭代时。Python&Selenium/XING:find_element第一次工作,而不是第二次迭代

我试图捕捉最常见的异常,但似乎并不奏效。

谁能解释PLS,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()测试了关闭弹出窗口而不是发送请求 - 这里第二次迭代成功。

+0

它是否打印“别的事情发生”?我可以访问你的应用吗?我认为你可能需要等待原因。 – Buaban

+0

@Buaban不,它只打印最后一个异常。它实际上不是一个应用程序,我登录到他们的网站并使用Selenium/PhantomJS自动浏览和发送文本。我阅读[这里](https://stackoverflow.com/questions/44293962/unable-to-access-element-within-page)关于单击某个特定按钮后元素更改的可能性,也许会发生什么?但我不知道如何解决这个问题。我也试过'driver.wait.until(EC.presence_of_element_located((By.NAME,“reason”)))'给了我相同的结果。 – user2822564

回答

0

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

我在原来的代码中,我曾与text=unicode(text.decode("utf-8"))线只是

try: 
    mssgbrd = driver.find_element_by_name("reason") 
    print "mssgbrd found" 

之前,我把它剪了简洁在我的岗位在这里,因为我认为这将不会是很重要的。男孩,是我错了......在试验时,我添加了两个print time.ctime()实例来了解可能的超时或等待时间;一个恰好在utf-8解码和try:块之间,另一个在关键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: 

我很想知道,但是,这里发生了什么。

相关问题