使用 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

干杯!