如何在 href 包含 javascript:__doPostBack() 时对页码进行分页
How to paginate through the page numbers when href contains javascript:__doPostBack()
我正在尝试抓取此网站 http://www.mfa.gov.tr/sub.ar.mfa?dcabec54-44b3-4aaa-a725-70d0caa8a0ae
但是当我想转到下一页时,我不能,因为 link 没有改变
你会发现页面 link 就是那样
href="javascript:__doPostBack('sb$grd','Page')"
我有一个我试过的代码,但它只转到第 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)
可以看到木下对这个url提出了要求:http://www.mfa.gov.tr/default.fr.mfa
按 F12 并转到网络选项卡查看。
你需要的文章都在这个url的文档里,你不需要分页,分页只是为了展示。此分页没有请求,希望下载显示的图片。
要使用 href 属性对页码进行分页,如 "javascript:__doPostBack('sb$grd','Page')"
您需要为 [=13] 引入 WebDriverWait =] 并且您可以使用以下 :
代码块:
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
参考
您可以在以下位置找到相关的详细讨论:
我正在尝试抓取此网站 http://www.mfa.gov.tr/sub.ar.mfa?dcabec54-44b3-4aaa-a725-70d0caa8a0ae 但是当我想转到下一页时,我不能,因为 link 没有改变 你会发现页面 link 就是那样
href="javascript:__doPostBack('sb$grd','Page')"
我有一个我试过的代码,但它只转到第 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)
可以看到木下对这个url提出了要求:http://www.mfa.gov.tr/default.fr.mfa 按 F12 并转到网络选项卡查看。
你需要的文章都在这个url的文档里,你不需要分页,分页只是为了展示。此分页没有请求,希望下载显示的图片。
要使用 href 属性对页码进行分页,如 "javascript:__doPostBack('sb$grd','Page')"
您需要为 [=13] 引入 WebDriverWait =] 并且您可以使用以下
代码块:
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
参考
您可以在以下位置找到相关的详细讨论: