2016-05-05 73 views
-2

爲什麼根據xpath打開第一個元素後循環無法工作? ,我得到下面的異常Python硒代碼不起作用

raise exception_class(message, screen, stacktrace) 
selenium.common.exceptions.NoSuchElementException: Message: Unable to 
locate element:{"method":"xpath","selector":"//[@id='searchresults']/tbody/tr[2]/td[1]"} 
Stacktrace: 
at FirefoxDriver.prototype.findElementInternal_ (file:///c:/users/home/appdata/local/temp/tmpeglp49/extensions/[email protected]/components/driver-component.js:10723) 
at FirefoxDriver.prototype.findElement (file:///c:/users/home/appdata/local/temp/tmpeglp49/extensions/[email protected]/components/driver-component.js:10732) 
at DelayedCommand.prototype.executeInternal_/h (file:///c:/users/home/appdata/local/temp/tmpeglp49/extensions/[email protected]/components/command-processor.js:12614) 
at DelayedCommand.prototype.executeInternal_ (file:///c:/users/home/appdata/local/temp/tmpeglp49/extensions/[email protected]/components/command-processor.js:12619) 
at DelayedCommand.prototype.execute/< (file:///c:/users/home/appdata/local/temp/tmpeglp49/extensions/[email protected]/components/command-processor.js:12561) 

代碼:

from selenium import webdriver 
from texttable import len 
from selenium.common.exceptions import NoSuchElementException 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.common.exceptions import TimeoutException 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.wait import WebDriverWait 
driver=webdriver.Firefox() 
driver.get('https://jobs.ericsson.com/search/') 
driver.maximize_window() 
driver.find_element_by_css_selector('[type="text"][id="keywordsearch-q"]').send_keys('Python') 
driver.find_element_by_css_selector('[class="btn"][type="submit"]').click() 
i=len("//*[@id='searchresults']/tbody/tr/td") 
for j in range(1,i+1): 
    driver.find_element_by_xpath("//*[@id='searchresults']/tbody/tr[%d]/td[1]"%j).click() 
    print driver.find_element_by_id("job-title").text 
    driver.back() 
    continue 

問題2: 爲什麼列表的長度是越來越顯示爲12,但他們只有5種HERF元素在裏面 ?

from selenium import webdriver 
from texttable import len 
from selenium.common.exceptions import NoSuchElementException 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.common.exceptions import TimeoutException 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.wait import WebDriverWait 
driver=webdriver.Firefox() 
driver.delete_all_cookies() 
driver.get('https://jobs.ericsson.com/search/') 
driver.maximize_window() 
driver.find_element_by_css_selector('[type="text"][id="keywordsearch-q"]').send_keys('Python') 
driver.find_element_by_css_selector('[class="btn"][type="submit"]').click() 
#currenturl = driver.current_url 
pages=driver.find_elements_by_css_selector('a[rel="nofollow"]') 
print pages 
print 'Its working' 
pages1=[] 
for page1 in pages: 
    pages1.append(page1.get_attribute('href')) 
    print int(len(pages1)) 

問題3: 如何獲得元素下的HTML標籤

a.How得到的B標籤1-25和104分別下?

請參考網址:

<div class="paginationShell clearfix" lang="en_US" xml:lang="en_US"> 
<div class="pagination well well-small"> 
<span class="pagination-label-row"> 
<span class="paginationLabel"> 
Results 
<b>1 – 25</b> 
    of 
<b>104</b> 
</span> 

b.How https://jobs.ericsson.com/search/?q=Python(在頁面的底部,結果部分越來越顯示),以獲得從HTML作業ID?

<div class="job"> 
<span itemprop="description"> 
<b>Req ID:</b> 
128378 
<br/> 
<br/> 
+0

在Python中,你需要意向代碼... – Margus

+0

硒沒有找到元素 – Margus

+0

我不這麼認爲,那麼我會收到意向錯誤吧?那麼爲什麼我沒有得到這樣的元素異常錯誤? – Subbu

回答

0

請嘗試以下操作:

for job in range(len(driver.find_elements_by_class_name('jobTitle-link'))): 
    driver.implicitly_wait(5) 
    driver.find_elements_by_class_name('jobTitle-link')[job].click() 
    print driver.find_element_by_id("job-title").text 
    driver.back() 
+0

測試這個答案,它的工作原理'軟件測試工程師(實習生)'之後發佈拋出異常:'NoSuchElementException:消息:無法找到元素:{「method」:「id」,「selector」:「job-title」}' – Abbas

+0

嘗試增加等待時間 - driver.implicitly_wait(10) ' – Andersson

0

這可能會或可能不會幫助你,但根據我自己的經驗,我一般遇到這樣的錯誤,當我的網頁還沒有完全加載。在搜索元素之前添加一個time.sleep(1)通常解決了我的問題(如果代碼是正確的)。

​​
+0

我不確定爲什麼人們投下這個問題。這個問題不是很清楚嗎? – Subbu

+0

人們喜歡看你已經嘗試過的東西。你發佈了你的問題,並問「爲什麼這不起作用?」。看起來好像人們在沒有明確表明你試圖解決問題時一般不會很好迴應。 –

0

這裏是一個有效的解決方案,這個想法是不要點擊每一個環節上,而該URL存儲在一個列表中,然後導航到它:

from selenium import webdriver 
from texttable import len 
from selenium.common.exceptions import NoSuchElementException 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.common.exceptions import TimeoutException 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.wait import WebDriverWait 

driver=webdriver.Firefox() 
driver.get('https://jobs.ericsson.com/search/') 
driver.maximize_window() 
driver.find_element_by_css_selector('[type="text"][id="keywordsearch-q"]').send_keys('Python') 
driver.find_element_by_css_selector('[class="btn"][type="submit"]').click() 

#To further process preserve the current url  
currenturl = driver.current_url 
#Get all the elements by class name 
jobs = driver.find_elements_by_class_name('jobTitle-link') 
jobslink = [] 
#Get hyperlink urls from the jobs elements 
#This way we avoid clicking each link and going back to the previous page 
for job in jobs: 
    jobslink.append(job.get_attribute('href')) 
#Get each element page 
for job in jobslink: 
    driver.get(job) 
    print driver.find_element_by_id("job-title").text 
+0

感謝您的回答。你能幫我解決我的代碼有什麼問題嗎? – Subbu