簡體   English   中英

Python Selenium找不到元素

[英]Python Selenium can't find element

我正在嘗試抓取一些亞馬遜問題和答案,特別是以下內容: https : //www.amazon.com/ask/questions/Tx1AYFFVMESHMZV/ref=ask_ql_ql_al_hza

這是每個問題的html部分(可以在開發人員工具中進行html檢查以獲取更多詳細信息):

 <span class="askExpanderContainer noScriptNotDisplayExpander"> <span class="askShortText"> They definitely help stretch the toes. I'm hoping to avoid a hammer toe that has been developing on one foot, and I'm not sure they're doing that, but I read that one way to avoid hammer toes developing is to stretch the toes, so I figure they will help in the long run and probably won't do any harm. From the beginning… <a class="a-link-normal askSeeMore" href="#"> see more </a> </span> <span class="askLongText"> They definitely help stretch the toes. I'm hoping to avoid a hammer toe that has been developing on one foot, and I'm not sure they're doing that, but I read that one way to avoid hammer toes developing is to stretch the toes, so I figure they will help in the long run and probably won't do any harm. From the beginning never hurt my toes, so I didn't have an adjustment period like some people have described. I use them every day, and I enjoy being calm and still for half an hour or 45 minutes while all I do is stretch my toes. That's worth something too! <a class="a-link-normal askSeeLess" href="#"> see less </a> </span> </span> 

我需要整個答案,但是當我嘗試查找askLongText元素時,出現以下錯誤:

raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such 
element: Unable to locate element: {"method":"css selector","selector":"span.askLongText"}
  (Session info: chrome=66.0.3359.181)
  (Driver info: chromedriver=2.38.552518 (183d19265345f54ce39cbb94cf81ba5f15905011),platform=Mac OS X 10.13.4 x86_64)

但是,我可以成功地提取askShortText元素。

這是python代碼:

driver.get(url)
title = driver.find_element_by_css_selector('p.a-size-large.askAnswersAndComments.askWrapText').text

answers_section = driver.find_element_by_css_selector('div.a-section.askAnswersAndComments.askWrapText')
answers = answers_section.find_elements_by_xpath('div[@id]')

for ans in answers:
    answer = ans.find_element_by_css_selector('span.askLongText').text
    print answer

注意:最后三個answer元素不包含askLongText類。 稍后,我將處理該異常,但未將其用於測試目的。 無論哪種方式,前三個元素的確包含此類,並且應該打印其內容,但是不會發生

這對我有用。

see_more_links = driver.find_elements_by_partial_link_text("see more")
for link in see_more_link:
    link.click()
answers = driver.find_elements_by_css_selector("span.askLongText")
for answer in answers:
    print str(answer.text).replace('see less', '')

OUTPUT:

它們絕對可以幫助您伸展腳趾。 我希望避免一只腳踩到的腳趾,我不確定他們正在這樣做,但是我讀到一種避免腳趾長出來的方法是伸展腳趾,所以我認為他們從長遠來看會有所幫助,可能不會造成任何傷害。 從一開始就從不傷腳趾,所以我沒有像某些人所描述的那樣進行調整。 我每天都使用它們,我喜歡保持鎮靜,保持半個小時或45分鍾,而我所做的只是伸展腳趾。 那也值得!

它們絕對可以重新調整您的腳趾並拉直您的腳骨。 您需要在開始時定期使用它們,以使其更直。 疼痛減輕一些后,您可以降低頻率並延長佩戴時間。 在過去的幾周里,它們幫助我的拇囊炎減輕了很多痛苦。 值得$ IMO,並且絕對比手術好!

我不知道要戴多久才能永久改善對齊度。 瑜伽腳趾對緩解腳和腳趾的緊張非常有幫助,這確實可以改善行走和平衡。 因為我的一只腳上已經有一個拇囊炎,所以我懷疑它們是否有助於使該腳保持對齊,但是瑜伽腳趾可以幫助我的腳更好地適應該拇囊炎。

@ GPT14的答案幾乎是完美的,但有一個小錯誤,因為該解決方案還打印出的文字內容以及每個答案的內容較少 ,這基本上不是答案的一部分。 要僅提取確切答案,可以使用以下代碼塊:

代碼塊:

from selenium import webdriver

options = webdriver.ChromeOptions() 
options.add_argument("start-maximized")
options.add_argument('disable-infobars')
driver=webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
driver.get("https://www.amazon.com/ask/questions/Tx1AYFFVMESHMZV/ref=ask_ql_ql_al_hza")
see_more_links = driver.find_elements_by_css_selector("span.askShortText>a")
for link in see_more_links:
    link.click()
long_answer_texts = driver.find_elements_by_xpath("//span[@class='askLongText']")
for long_answer_text in long_answer_texts:
    print(driver.execute_script('return arguments[0].firstChild.textContent;', long_answer_text).strip())

控制台輸出:

它們絕對可以幫助您伸展腳趾。 我希望避免一只腳踩到的腳趾,我不確定他們正在這樣做,但是我讀到一種避免腳趾長出來的方法是伸展腳趾,所以我認為他們從長遠來看會有所幫助,可能不會造成任何傷害。 從一開始就從不傷腳趾,所以我沒有像某些人所描述的那樣進行調整。 我每天都使用它們,我喜歡保持鎮靜,保持半個小時或45分鍾,而我所做的只是伸展腳趾。 那也值得!

它們絕對可以重新調整您的腳趾並拉直您的腳骨。 您需要在開始時定期使用它們,以使其更直。 疼痛減輕一些后,您可以降低頻率並延長佩戴時間。 在過去的幾周里,它們幫助我的拇囊炎減輕了很多痛苦。 值得$ IMO,並且絕對比手術好!

我不知道要戴多久才能永久改善對齊度。 瑜伽腳趾對緩解腳和腳趾的緊張非常有幫助,這確實可以改善行走和平衡。 因為我的一只腳上已經有一個拇囊炎,所以我懷疑它們是否有助於使該腳保持對齊,但是瑜伽腳趾可以幫助我的腳更好地適應該拇囊炎。

如果您希望一次性獲得所有答案,則值得嘗試以下腳本:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.amazon.com/ask/questions/Tx1AYFFVMESHMZV/ref=ask_ql_ql_al_hza")

for showmore in driver.find_elements_by_css_selector(".askSeeMore"):
    showmore.click()

for ans in driver.find_elements_by_css_selector("[id^='answer-']"):

    if "askLongText" in ans.get_attribute("class"):
        print(ans.find_element_by_css_selector(".askLongText").text)

    else:
        print(ans.find_element_by_css_selector("span").text)

driver.quit()

我已經調試了您的代碼。 下面提到的代碼行:

answer = ans.find_element_by_css_selector('span.askLongText').text

拋出異常,因為元素span不只包含文本。 span標簽內有一個anchor標簽。 為了獲取元素span的全部內容,必須使用.get_attribute('innerHTML')

您必須將代碼行更改為:

answer = ans.find_element_by_css_selector('span.askLongText').get_attribute('innerHTML')

在答案中,您將獲得span元素的全部內容。

假設您需要長答案和短答案,並且您不想嘗試使用更復雜的定位器和一些python魔術來測試“查看更多”鏈接的功能,那么我們可以:

  1. 返回簡短的答案
  2. 跳過點擊,以便更快地運行
  3. 從長答案中刪除“少見”字符串
  4. 修剪開始和結束空格的每個答案

     answers = driver.find_elements_by_css_selector("div[id^='answer'] > span:not([class]), div[id^='answer'] span.askLongText") for answer in answers: strings = driver.execute_script("return arguments[0].innerText", answer).splitlines() print([s.strip() for s in strings if s.strip()][0]) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM