Selenium / Python-提交表单后提取动态生成的HTML

S. *_*nov 6 python selenium selenium-chromedriver

我试图访问的网页正在使用JavaScript动态生成HTML表单(该表单:https : //imgur.com/a/rhmXB)。键入时print(page_source),该表似乎出现在正在输出的HTML中。

但是,在填写输入字段并提交表单之后,将出现另一个包含验证码图像的输入字段(如此处所示:https : //imgur.com/a/xVfBS)。键入后print(page_source),带有验证码的输入表单似乎未插入HTML。

我的问题是:如何访问此动态生成的HTML,其中包含使用Selenium的输入字段和CAPTCHA图像?

这是我的代码(也在pastebin中):

from selenium import webdriver
driver = webdriver.Chrome("/var/chromedriver/chromedriver")

URL = 'http://nap.bg/link?id=104'
driver.get(URL)

input_field = driver.find_element_by_name('ipID')
input_field.send_keys('0000000000')
driver.find_element_by_id('idSubmit').click()
print(driver.page_source)
Run Code Online (Sandbox Code Playgroud)

Key*_*dar 5

单击按钮后,该页面将花费一些时间来加载验证码和其他内容。您需要等待加载完成。您可以使用Selenium的显式等待来做到这一点。

这是您可以做什么的示例:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
URL = 'http://nap.bg/link?id=104'
driver.get(URL)

input_field = driver.find_element_by_name('ipID')
input_field.send_keys('0000000000')
driver.find_element_by_id('idSubmit').click()

wait = WebDriverWait(driver, 10)
wait.until(EC.element_to_be_clickable((By.NAME, 'ipResponse')))

print(driver.page_source)
Run Code Online (Sandbox Code Playgroud)