使用 Python 和 Selenium 使用 .submit() 抓取 Ajax 表单
Scrape an Ajax form with .submit() with Python and Selenium
我正在尝试从网页中获取 link。网页使用 javascript 发送请求,然后服务器发送响应,直接下载 PDF。这个新的 PDF 会自动下载到您的浏览器中。
我的第一种方法是使用 selenium 来获取信息:
# Path chromedriver & get url
path = "/Users/my_user/Desktop/chromedriver"
browser = webdriver.Chrome(path)
browser.get("https://www.holzwickede.de/amtsblatt/index.php")
# Banner click
ban = WebDriverWait(browser,15).until(EC.element_to_be_clickable((By.XPATH,"//a[@id='cc_btn_accept_all']"))).click()
#Element to get
elem = browser.find_element_by_xpath("//div[@id='content']/div[7]/table//form[@name='gazette_52430']/a[@href='#gazette_52430']")
elem.click()
print (browser.current_url)
结果是当前的URL,对应的是同一个网页,而请求是直接到服务器的
https://www.holzwickede.de/amtsblatt/index.php#gazette_52430
在这个不成功的结果之后,我尝试通过请求获取它。
# Access requests via the `requests` attribute
for request in browser.requests: #It captures all the requessin chronologica order
if request.response.headers:
print(
request.path,
request.response.status_code,
request.response.headers,
request.body,
"/n"
)
结果仍然不是 link PDF 的来源。
你们知道我能做什么吗?
提前致谢。
我找到了答案。该请求发送 POST 表单。因此,我们必须提取 header 内容及其参数。当您知道表单发送的参数时,您可以使用请求将 link 返回到您的控制台。
response = requests.get(url, params={'key1': 'value1', 'key2': 'value2'})
print (response.url)
这个问题另外解决了这个问题:Capture AJAX response with selenium python
干杯!
我正在尝试从网页中获取 link。网页使用 javascript 发送请求,然后服务器发送响应,直接下载 PDF。这个新的 PDF 会自动下载到您的浏览器中。 我的第一种方法是使用 selenium 来获取信息:
# Path chromedriver & get url
path = "/Users/my_user/Desktop/chromedriver"
browser = webdriver.Chrome(path)
browser.get("https://www.holzwickede.de/amtsblatt/index.php")
# Banner click
ban = WebDriverWait(browser,15).until(EC.element_to_be_clickable((By.XPATH,"//a[@id='cc_btn_accept_all']"))).click()
#Element to get
elem = browser.find_element_by_xpath("//div[@id='content']/div[7]/table//form[@name='gazette_52430']/a[@href='#gazette_52430']")
elem.click()
print (browser.current_url)
结果是当前的URL,对应的是同一个网页,而请求是直接到服务器的
https://www.holzwickede.de/amtsblatt/index.php#gazette_52430
在这个不成功的结果之后,我尝试通过请求获取它。
# Access requests via the `requests` attribute
for request in browser.requests: #It captures all the requessin chronologica order
if request.response.headers:
print(
request.path,
request.response.status_code,
request.response.headers,
request.body,
"/n"
)
结果仍然不是 link PDF 的来源。 你们知道我能做什么吗? 提前致谢。
我找到了答案。该请求发送 POST 表单。因此,我们必须提取 header 内容及其参数。当您知道表单发送的参数时,您可以使用请求将 link 返回到您的控制台。
response = requests.get(url, params={'key1': 'value1', 'key2': 'value2'})
print (response.url)
这个问题另外解决了这个问题:Capture AJAX response with selenium python
干杯!