我正在尝试通过以下搜索结果进行分页:Becoming Amazon search。我得到'NoSuchElementException'..'Unable to locate element: < insert xpath here >
这是html:
<div id="pagn" class="pagnHy">
<span class="pagnLink">
<a href="/s/ref=sr_pg_2?rh=...">2</a>
</span>
</div>
这是我尝试过的xpath:
driver.find_element_by_xpath('//*[@id="pagn" and @class="pagnLink" and text()="2"]')
driver.find_element_by_xpath('//div[@id="pagn" and @class="pagnLink" and text()="2"]')
driver.find_element_by_xpath("//*[@id='pagn' and @class='pagnLink' and text()[contains(.,'2')]]")
driver.find_element_by_xpath("//span[@class='pagnLink' and text()='2']")
driver.find_element_by_xpath("//div[@class='pagnLink' and text()='2']")
如果我仅使用find_element_by_link_text(...)
,则有时会选择错误的链接。例如,如果评论数等于我要查找的页码(在本例中为2),则它将选择具有2条评论的产品,而不是页码“ 2”。
答案 0 :(得分:1)
您试图在同一谓词中混合来自不同WebElement的属性和文本节点。您应该尝试将它们分开,如下所示:
driver.find_element_by_xpath('//div[@id="pagn"]/span[@class="pagnLink"]/a[text()="2"]')
答案 1 :(得分:1)
当我查看标记时,看到以下内容:
<span class="pagnLink">
<a href="/s/ref=sr_pg_2?rh=...">2</a>
</span>
因此,您想找到一个类为span
的{{1}},其中有一个带有文本pagnLink
的子元素a
,或者:
2
答案 2 :(得分:1)
有时,最好采取中间步骤,然后首先获取包含结果的元素。 之后,您只需在此元素内搜索。 这样可以简化搜索字词。
from selenium import webdriver
url = 'https://www.amazon.com/s/ref=nb_sb_noss_2?url=search-alias%3Daps&fieldkeywords=becoming&rh=i%3Aaps%2Ck%3Abecoming'
driver = webdriver.Firefox()
resp = driver.get(url)
results_list_object = driver.find_element_by_id('s-results-list-atf')
results = results_list_object.find_elements_by_css_selector('li[id*="result"]')
for number, article in enumerate(results):
print(">> article %d : %s \n" % (number, article.text))