Selenium Python-访问搜索结果的下一页

2024-05-17 09:02:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须从以下网址逐个单击每个搜索结果:

Search Guidelines

我首先从显示的文本中提取结果的总数,以便设置迭代的上限

upperlimit=driver.find_element_by_id("total_results")
number = int(upperlimit.text.split(' ')[0])

然后循环被定义为 对于范围(1,数字)中的i:

但是,在浏览完第一页上的前10个结果后,列表索引超出了范围(可能是因为没有更多的链接可单击)。我需要点击“下一步”来获得下10个结果,以此类推,直到我完成所有搜索结果。我该怎么做呢?

任何帮助都将不胜感激!


Tags: 文本idnumbersearchbydriverelementfind
2条回答

甚至不需要编程地按Next按钮,如果您看到carrely,则在浏览其他结果页时,url只需要一个新参数:

url = "http://www.nice.org.uk/Search.do?searchText=bevacizumab&newsearch=true&page={}#showfilter"

for i in range(1,5):
    driver.get(url.format(i))

    upperlimit=driver.find_element_by_id("total_results")
    number = int(upperlimit.text.split(' ')[0])

如果您仍想按“下一步”按钮,可以使用:

driver.find_element_by_class_name('next').click()

但我还没有测试过。

问题是,id为total_results的元素的值在页面加载后发生更改,首先它包含117,然后更改为44

相反,这里有一个更稳健的方法。它一页一页地处理,直到没有剩余的页:

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException

driver = webdriver.Firefox()
url = 'http://www.nice.org.uk/Search.do?searchText=bevacizumab&newsearch=true#/search/?searchText=bevacizumab&mode=&staticTitle=false&SEARCHTYPE_all2=true&SEARCHTYPE_all1=&SEARCHTYPE=GUIDANCE&TOPICLVL0_all2=true&TOPICLVL0_all1=&HIDEFILTER=TOPICLVL1&HIDEFILTER=TOPICLVL2&TREATMENTS_all2=true&TREATMENTS_all1=&GUIDANCETYPE_all2=true&GUIDANCETYPE_all1=&STATUS_all2=true&STATUS_all1=&HIDEFILTER=EGAPREFERENCE&HIDEFILTER=TOPICLVL3&DATEFILTER_ALL=ALL&DATEFILTER_PREV=ALL&custom_date_from=&custom_date_to=11-06-2014&PAGINATIONURL=%2FSearch.do%3FsearchText%40%40bevacizumab%26newsearch%40%40true%26page%40%40&SORTORDER=BESTMATCH'
driver.get(url)

page_number = 1
while True:
    try:
        link = driver.find_element_by_link_text(str(page_number))
    except NoSuchElementException:
        break
    link.click()
    print driver.current_url
    page_number += 1

基本上,这里的想法是获得下一个页面链接,直到没有这样的链接为止(NoSuchElementException将被抛出)。注意,它可以用于任意数量的页面和结果。

它打印:

http://www.nice.org.uk/Search.do?searchText=bevacizumab&newsearch=true&page=1
http://www.nice.org.uk/Search.do?searchText=bevacizumab&newsearch=true&page=2#showfilter
http://www.nice.org.uk/Search.do?searchText=bevacizumab&newsearch=true&page=3#showfilter
http://www.nice.org.uk/Search.do?searchText=bevacizumab&newsearch=true&page=4#showfilter
http://www.nice.org.uk/Search.do?searchText=bevacizumab&newsearch=true&page=5#showfilter

相关问题 更多 >