python - Selenium 帮助切换到 iframe 然后点击链接
问题描述
我目前正在尝试单击每个链接,这些链接会为我提供有关餐厅的更多信息。 https://www.halton.ca/For-Residents/Food-Safety/Dinewise/Search-Directory-of-Food-Premises-Dinewise。
第一家餐厅是 151 Social,我试图点击它,但似乎不适合我。我已经编译了一个 pd.Series 包含每个餐厅的 xpath 链接
//*[@id="lblContent"]/div[3]/table/tbody/tr[1]/td[1]/a
那只是第一家餐厅
for element in range(len(df['Temp xPath links'])):
frame = WebDriverWait(driver, 30).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"iframe-form")))
ref = WebDriverWait(driver, 30).until(EC.presence_of_element_located(By.xpath(df['Temp xPath links'][element])))
driver.execute_script("arguments[0].scrollIntoView();", ref)
driver.execute_script("arguments[0].click();", ref)
我正在努力进入下一页。任何帮助都会很棒。
解决方案
诱导WebdriverWait
() 并等待element_to_be_clickable
() 和XPATH
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//a[text()='151 Social']"))).click()
完整代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://www.halton.ca/For-Residents/Food-Safety/Dinewise/Search-Directory-of-Food-Premises-Dinewise")
WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"iframe-form")))
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.ID,"btnOK"))).click()
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.ID,"btnGetEstablishments"))).click()
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//a[text()='151 Social']"))).click()
推荐阅读
- python - 在python中动态更改行值
- r - 通过行/列名在第三维上连接数据框
- python - 如何从我的输出结果中删除括号“[]”和逗号?
- javascript - 没有为元素定义 Aurelia API:
- c++ - 使用参考时的奇怪行为
- python - Python - 在同一天遍历前一周
- android - Android - 回到以前的应用程序会发出奇怪的信息
- jquery - Ajax 请求不适用于数据表分页
- node.js - 注销方法需要一个数据库名称作为第一个参数(Mongo 的 Node.js 驱动程序)
- javascript - 使用 jQuery 选择目标没有后缀的所有链接