【问题标题】:How to move to the next page on Python Selenium?如何转到 Python Selenium 的下一页?
【发布时间】:2019-05-26 03:05:47
【问题描述】:

我正在尝试为特定网站构建代理抓取工具,但无法转到下一页。

这是我正在使用的代码。

如果你回答了我的问题,请向我解释一下你使用了什么,如果可以的话,如果有关于这种代码的任何好的教程,请给我一些:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

options = Options()
#options.headless = True     #for headless
#options.add_argument('--disable-gpu') #for headless and os win

driver = webdriver.Chrome(options=options)

driver.get("https://hidemyna.me/en/proxy-list/")
time.sleep(10) #bypass cloudflare


tbody = driver.find_element_by_tag_name("tbody")
cell = tbody.find_elements_by_tag_name("tr")

for column in cell:
    column = column.text.split(" ")
    print (column[0]+":"+ column[1]) #ip and port

nxt = driver.find_element_by_class_name('arrow_right')
nxt.click()

【问题讨论】:

  • 试试nxt = driver.find_element_by_css_selector('.arrow__right>a')。注意类名中有两个下划线
  • 在此处发布相关的 HTML。

标签: python python-3.x selenium screen-scraping webdriverwait


【解决方案1】:

下一个按钮往往因网页而异...您必须检查按钮并使用 xpath 或 beaufifulsoup 处理它

通常有“下一页”和“上一页”...将您的 xpath 指向“下一页”

【讨论】:

    【解决方案2】:

    要移动到下一页,您可以尝试以下解决方案:

    • 代码块:

      from selenium import webdriver
      from selenium.webdriver.chrome.options import Options
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      from selenium.common.exceptions import TimeoutException, WebDriverException
      
      options = Options()
      options.add_argument("start-maximized")
      options.add_argument("disable-infobars")
      options.add_argument("--disable-extensions")
      driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
      driver.get('https://hidemyna.me/en/proxy-list/')
      while True:
          try:
              driver.execute_script("return arguments[0].scrollIntoView(true);", WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//li[@class='arrow__right']/a"))))
              driver.find_element_by_xpath("//li[@class='arrow__right']/a").click()
              print("Navigating to Next Page")
          except (TimeoutException, WebDriverException) as e:
              print("Last page reached")
              break
      driver.quit()
      
    • 控制台输出:

      Navigating to Next Page
      Navigating to Next Page
      Navigating to Next Page
      Navigating to Next Page
      Navigating to Next Page
      Navigating to Next Page
      Navigating to Next Page
      Navigating to Next Page
      Navigating to Next Page
      Navigating to Next Page
      Navigating to Next Page
      Navigating to Next Page
      Navigating to Next Page
      Navigating to Next Page
      Navigating to Next Page
      Navigating to Next Page
      Navigating to Next Page
      Navigating to Next Page
      Navigating to Next Page
      Navigating to Next Page
      .
      .
      .
      Navigating to Next Page
      Last page reached
      

    【讨论】:

    • @CodeIt 你能解释一下为什么这在第 2 页不起作用吗?
    • @DebanjanB ,在第二页上,您的选择器将匹配 Previous 按钮而不是 Next
    • 尝试了上述方法,但在此站点上不起作用。错误输出是 selenium.common.exceptions.WebDriverException: Message: unknown error: Element is not clickable at point (874, 563)。其他元素会收到点击:
    • @Haunter 查看我的答案更新并告诉我状态。
    【解决方案3】:

    您实际上并没有单击锚点<a> 标记。要导航到下一页,您需要在<a> 链接上click

    您可以使用find_element_by_xpath,如下所示。

    driver.find_element_by_xpath('//*[@id="content-section"]/section[1]/div/div[4]/ul/li[1]/a').click()
    

    您可以使用另一个 @Andersson 建议的 css 选择器,而不是使用 xpath。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      • 2014-07-07
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      相关资源
      最近更新 更多