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

时间:2018-03-27 17:28:06

标签: python selenium selenium-chromedriver

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

但是,在填写输入字段并提交表单后,会出现另一个带有CAPTCHA图像的输入字段(如下所示:https://imgur.com/a/xVfBS)。输入print(page_source)后,带有CAPTCHA的输入表单似乎不会插入HTML中。

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

这是我的代码(同样,在pastebin中:https://pastebin.com/ULSsmbZq):

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)

1 个答案:

答案 0 :(得分:3)

单击该按钮后,该页面需要一些时间来加载CAPTCHA和其他内容。您需要等待它才能完成加载。你可以使用Selenium的explicit waits

来做到这一点

这是你可以做的一个例子:

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)