使用 Selenium 和 Python 进行用户输入的网页抓取动态网站

Posted

技术标签:

【中文标题】使用 Selenium 和 Python 进行用户输入的网页抓取动态网站【英文标题】:Web-scraping dynamic website with user input using Selenium and Python 【发布时间】:2022-01-24 03:19:44 【问题描述】:

作为游泳者,我正在尝试从用户输入姓名或其他可选字段后可以访问的表中提取时间。该网站动态生成此数据。以下是我当前的代码,不考虑用户输入。

我对 selenium 的自动化工作原理以及如何为其找到正确的文本字段以读取我的结果以及我的其余代码以提取表格感到非常困惑。

谁能提供一些关于如何进行的建议?

任何帮助表示赞赏并提前致谢。

这是我当前的代码:

from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
site = 'https://www.swimming.org.nz/results.html'
wd = webdriver.Chrome( "C:\\Users\\joseph\\webscrape\\chromedriver.exe")
wd.get(site)
html = wd.page_source
df = pd.read_html(html)
df[1].to_csv('Results.csv') 

【问题讨论】:

【参考方案1】:

首先,您需要向 Swimmer 字段发送一个字符序列

要将字符序列发送到 Swimmer 字段,因为元素位于 iframe 内,因此您必须:

诱导WebDriverWait 使所需的框架可用并切换到它

诱导WebDriverWait 使所需的元素可点击

您可以使用以下任一Locator Strategies:

使用CSS_SELECTOR

driver.get("https://www.swimming.org.nz/results.html")
WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe#iframe")))
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[id^='x-MS_FIELD_MEMBER']"))).send_keys("Joseph Zhang")

使用XPATH

driver.get("https://www.swimming.org.nz/results.html")
WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='iframe']")))
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[starts-with(@id, 'x-MS_FIELD_MEMBER')]"))).send_keys("Joseph Zhang")

注意:您必须添加以下导入:

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

浏览器快照:


参考文献

您可以在以下位置找到一些相关讨论:

Switch to an iframe through Selenium and python selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element while trying to click Next button with selenium selenium in python : NoSuchElementException: Message: no such element: Unable to locate element

【讨论】:

以上是关于使用 Selenium 和 Python 进行用户输入的网页抓取动态网站的主要内容,如果未能解决你的问题,请参考以下文章

用python+selenium进行一次cnblog的登录测试

一次完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试

Firefox与selenium和python代理问题

一次完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试

一次完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试

python 使用selenium和requests爬取页面数据