2017-08-25 170 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: 

我很想知道,但是,這裏發生了什麼。

相關問題