IT评测·应用市场-qidao123.com
标题:
第五课:动态网页破解:Selenium自动化技术解析
[打印本页]
作者:
慢吞云雾缓吐愁
时间:
2025-3-8 14:44
标题:
第五课:动态网页破解:Selenium自动化技术解析
在当前前端技术发展的情况下,越来越多的网站都是动态加载数据或则动态渲染页面。本文将具体介绍Selenium动态抓取页面数据,包括浏览器ChromeDriver加载及调用,并通过加载淘宝页面并进行登陆的案例来展示它们的实际应用。
一、动态网页加载机制解析
1.1 动态网页概述
动态网页是指在用户访问时,网页内容不是一次性加载完成,而是根据用户的操纵或需求,通过异步加载数据或资源,实现内容的动态更新。这种技术可以明显进步页面加载速度,减少首次加载时间,提升用户体验。
1.2 动态加载实现方式
动态加载通常通过
AJAX(Asynchronous JavaScript and XML)
技术实现,JavaScript可以在不重新加载整个页面的情况下更新部分内容。别的,一些当代前端框架如
Vue、React
等也提供了丰富的组件和API,使得动态加载变得更加简朴。
1.3 动态加载对爬虫的影响
对于网络爬虫而言,动态加载技术增加了数据抓取的难度。传统的爬虫工具可能无法直接获取到通过
JavaScript
动态加载的内容,因此需要利用
Selenium
等自动化测试工具来模拟浏览器的行为,从而获取到完整的页面内容。
二、WebDriver设置(Chrome/Firefox)
2.1 WebDriver简介
WebDriver是Selenium与浏览器进行交互的桥梁,它允许我们控制浏览器,执行各种操纵,如打开网页、填写表单、点击按钮等。不同的浏览器需要下载对应的WebDriver。
2.2 Chrome WebDriver设置
1. 检察Chrome浏览器版本号:
1. 在Chrome浏览器中,通过“设置”>“关于Chrome”检察版本号。
2. 或者在地址栏输入chrome://version/检察。
2. 下载ChromeDriver:
1. 访问ChromeDriver下载,下载与Chrome浏览器版本相匹配的ChromeDriver。
2. windows:将下载的ChromeDriver解压,并将chromedriver.exe放置在Python安装目录下的Scripts文件夹中,或者将其路径添加到系统的PATH环境变量中。
3. mac:将下载后的文件进行加压
# 将目录下的chromedriver文件移动到/usr/local/bin
sudo mv chromedriver /usr/local/bin
# 修改chromedriver的权限
sudo chmod +x /usr/local/bin/chromedriver
# 查看chromedriver的版本
chromedriver --version
复制代码
3. 测试设置
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.quit()
复制代码
三、元素定位八大方法
在Selenium自动化测试中,定位页面元素是关键的一步。以下是八种常用的元素定位方法:
3.1 ID定位
element = driver.find_element(By.ID, "element_id")
复制代码
3.2 Name定位
element = driver.find_element(By.NAME, "element_name")
复制代码
3.3 Tag Name定位
elements = driver.find_elements(By.TAG_NAME, "tag_name")
复制代码
3.4 Class Name定位
elements = driver.find_elements(By.CLASS_NAME, "class_name")
复制代码
3.5 Link Text定位
element = driver.find_element(By.LINK_TEXT, "link_text")
复制代码
3.6 Partial Link Text定位
element = driver.find_element(By.PARTIAL_LINK_TEXT, "partial_link_text")
复制代码
3.7 CSS Selector定位
element = driver.find_element(By.CSS_SELECTOR, "css_selector")
复制代码
3.8 XPath定位
element = driver.find_element(By.XPATH, "xpath_expression")
复制代码
四、案例:模拟登录淘宝
4.1 准备工作
确保已安装Python环境,并安装必要的库:
pip install selenium requests
复制代码
4.2 淘宝登录流程分析
淘宝的登录流程相对复杂,涉及
验证码判定、用户名密码验证、单点登录(SSO)
等多个步调。以下是一个简化的模拟登录流程:
访问淘宝登录页面。
输入用户名并判定是否需要验证码。
输入密码并提交登录请求。
利用返回的token去阿里巴巴(alibaba.com)互换st码。
利用st码获取登录的cookies,完成登录。
4.3 实当代码
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_option = webdriver.ChromeOptions()
driver_option.add_experimental_option('detach', True)
driver = webdriver.Chrome(options=driver_option)
driver.implicitly_wait(10)
try:
# 访问淘宝登录页面
driver.get("https://login.taobao.com/member/login.jhtml")
# 输入用户名
username_input = driver.find_element(By.ID, "fm-login-id")
username_input.send_keys("your_account")
# 输入密码
password_input = driver.find_element(By.ID, "fm-login-password")
password_input.send_keys("your_password")
# 点击登录按钮
login_button = driver.find_element(By.ID, "J_SubmitStatic")
login_button.click()
# 等待登录成功(此处简化处理,假设登录成功)
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "TB_trace_logo"))
)
print("登录成功!")
# 获取淘宝昵称(验证登录成功)
nickname = driver.find_element(By.CSS_SELECTOR, "#nick-name em").text
print(f"淘宝昵称:{nickname}")
finally:
# 关闭浏览器
driver.quit()
print('--------------------- finally')
复制代码
4.4 注意事项
验证码处理:
实际登录过程中,淘宝可能会弹出验证码。这需要利用更复杂的图像处理技术来识别验证码,或者通过人工干预的方式输入验证码。
登录状态判定:
上述代码中的登录乐成判定是基于页面元素的出现,实际应用中可能需要更复杂的逻辑来判定登录状态。
环境设置:
确保已正确设置Chrome WebDriver,并将其路径添加到系统的PATH环境变量中。
通过本文的介绍,我们了解了动态网页加载机制、WebDriver的设置方法、元素定位的八大方法,并通过模拟登录淘宝的案例展示了Selenium自动化技术的应用。希望这些内容能对你有所资助!
关注我!!
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4