3 回答
TA贡献1875条经验 获得超3个赞
您面临的问题是您要访问的表单驻留在 iFrame 中。您必须明确告诉 selenium 切换到 iFrame。你可以这样做。
driver = webdriver.Chrome('./chromedriver')
driver.get('https://www.alabamagis.com/Tallapoosa/')
driver.find_element_by_xpath('/html/body/center/font[2]/a').click()
time.sleep(6)
driver.find_element_by_xpath('/html/body/font/a[1]').click()
time.sleep(6)
# new code starts here
driver.switch_to.frame('searchFrame')
driver.find_element_by_name('Master__Account').send_keys('your desired input')
此外,查找所需输入的更简单方法是使用find_element_by_name. 如果您检查要抓取的网站的 HTML 代码,input field您要访问的网站的name属性值为Master__Account。您可以使用它来访问输入。
TA贡献1862条经验 获得超6个赞
Account字段在 a 中,<frame>
因此您必须:
诱导WebDriverWait以等待所需的框架可用并切换到它。
诱导WebDriverWait使所需的元素可点击。
您可以使用以下任一定位器策略:
使用CSS_SELECTOR:
driver.get('https://www.alabamagis.com/Tallapoosa/frameset.cfm?cfid=3986761&cftoken=54089502')
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"frame[name='searchFrame']")))
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name='Master__Account']"))).send_keys("Sean Ken")
使用XPATH:
driver.get('https://www.alabamagis.com/Tallapoosa/frameset.cfm?cfid=3986761&cftoken=54089502')
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//frame[@name='searchFrame']")))
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@name='Master__Account']"))).send_keys("Sean Ken")
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
浏览器快照:
TA贡献1909条经验 获得超7个赞
您没有将帐号发送到文本字段,试试这个 driver.find_element_by_xpath('/html/body/form/table/tbody/tr[2]/td[2]/input').send_keys('account_no')
send_keys 用于将输入发送到文本字段和
driver.find_element_by_xpath('/html/body/form/table/tbody/tr[11]/td/input[1]').click()
点击搜索按钮
添加回答
举报