【问题标题】:How to paginate through the page numbers when href contains javascript:__doPostBack()当 href 包含 javascript:__doPostBack() 时如何通过页码进行分页
【发布时间】:2019-12-17 12:40:28
【问题描述】:

我正在尝试抓取这个网站http://www.mfa.gov.tr/sub.ar.mfa?dcabec54-44b3-4aaa-a725-70d0caa8a0ae 但是当我想去下一页时我不能因为链接没有改变 你会发现页面链接是这样的

href="javascript:__doPostBack('sb$grd','Page$1')"

我尝试了一个代码,但它只转到第 2 页,然后给了我一个错误:故事元素引用:元素未附加到页面文档

from selenium import webdriver
url = 'http://www.mfa.gov.tr/sub.ar.mfa?dcabec54-44b3-4aaa-a725-70d0caa8a0ae'
driver = webdriver.Chrome()
driver.get(url)
btn = [w for w in driver.find_elements_by_xpath('//*[@id="sb_grd"]/tbody/tr[26]/td/table/tbody/tr/td/a')]
for b in btn:
    driver.execute_script("arguments[0].click();", b)

【问题讨论】:

  • 页面上有一个表单(name="form1"),在链接激活时提交。您可以将这样的表单发布到网站,但如果请求没有得到响应(或者响应是实际页面),我想您不走运。

标签: python-3.x selenium-webdriver xpath webdriverwait dopostback


【解决方案1】:

要通过 href 属性为 "javascript:__doPostBack('sb$grd','Page$2')" 的页码进行分页,您需要为 element_to_be_clickable() 引入 WebDriverWait,您可以使用以下 Locator Strategies

  • 代码块:

    from selenium import webdriver
    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
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get("http://www.mfa.gov.tr/sub.ar.mfa?dcabec54-44b3-4aaa-a725-70d0caa8a0ae")
    while True:
        try:
            WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//table[@id='sb_grd']//table/tbody/tr//td/span//following::td[1]/a"))).click()
            print("Next page clicked")
        except TimeoutException:
            print("No more pages")
            break
    driver.quit()
    
  • 控制台输出:

    Next page clicked
    Next page clicked
    Next page clicked
    .
    .
    .
    No more pages
    

参考

您可以在以下位置找到相关的详细讨论:

【讨论】:

【解决方案2】:

你可以看到在木头下向这个url发出了一个请求:http://www.mfa.gov.tr/default.fr.mfa 执行 F12 并转到网络选项卡以查看。

您需要的所有文章都会在这个url的文档中,您不需要分页,因为分页只是一个目的显示。此分页未发出任何请求,希望下载显示的图像。

【讨论】:

  • 我在哪里可以找到它?我打开了网络标签,但找不到它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
  • 2015-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
相关资源
最近更新 更多