赞
踩
使用python的requests模块还是存在很大的局限性,例如:只发一次请求;针对ajax动态加载的网页则无法获取数据等等问题。特此,本章节将通过selenium模拟浏览器来完成更高级的爬虫抓取任务。
Selenium是一个用于自动化Web应用程序测试的开源工具集。它提供了一组API和工具,可以与多种编程语言一起使用,如Java、Python、C#等,用于模拟用户在浏览器中的行为,如点击、填写表单、提交数据等。Selenium可以运行在各种浏览器上,包括Chrome、Firefox、Safari等,它还可以与多个测试框架和开发工具集成,如JUnit、TestNG、Maven等。
Selenium的核心组件是WebDriver,它可以直接与浏览器进行交互,并模拟用户操作。WebDriver提供了一系列的方法和命令,可以控制浏览器的打开、页面导航、元素查找、交互操作等。使用Selenium,开发人员可以编写自动化测试脚本,以验证Web应用程序的功能和性能,并自动运行这些脚本进行回归测试。
除了WebDriver,Selenium还包含其他辅助工具,如Selenium IDE(集成开发环境)和Selenium Grid(分布式测试工具),它们提供了更多的功能和扩展性,以满足不同的测试需求。
总用之,Selenium是一个功能强大的自动化测试工具,可用于模拟户在浏览器中的行为,以及验证和测试Web应用程序的功能和性能。
点击 File -> Settings -> 选择项目:python12中的Python解析器
,再点击 +
按钮,输入selenium,选择指定的版本,最后点击安装包(I)
即可。
注意:这里下载的selenium 4.0.0,不要下载高版本,怕出问题,与4.0.0一致即可。
新建python文件,导入selenium中的webdriver:
from selenium from webdriver
新版本的浏览器请使用此处地址:Chrome for Testing availability
下载对应浏览器的webDriver,例如:Chrome浏览器对应的webDriver
注意:一定要下载浏览器对应版本的webDriver,如果没有完全对应的,可以下载接近版本的webDriver。
将下载chromedriver_win32.zip解压,并将其内的chromedriver.exe复制到Python安装目录下的Scripts目录中。
- from selenium import webdriver
-
- # 使用Chrome谷歌的webDriver
- driver = webdriver.Chrome()
- # 模拟get请求抓取jd网站
- driver.get("https://www.jd.com")
Firefox:
driver = webdriver.Firefox()
Safari:
driver = webdriver.Safari()
Edge:
driver = webdriver.Edge()
使用find_element
方法查找元素。可以使用各种定位方式,例如通过ID、类名、标签名等。
方法 | 说明 |
---|---|
find_element_by_name | 通过ID查找元素 |
find_element_by_xpath | 通过XPath查找元素 |
find_element_by_tag_name | 通过标签名查找元素 |
find_element_by_class_name | 通过类名查找元素 |
find_element_by_css_selector | 通过CSS选择器查找元素 |
注意:多个元素的查找只需要将element改为elements即可。
- # 通过ID查找元素
- element = driver.find_element(By.ID,"J_searchbg");
- print(element.text)
- print(element.text)
- # 通过标签名查找
- element = driver.find_element(By.TAG_NAME,"input");
- # 获取到input中的aria-label属性值
- print(element.get_attribute("aria-label"))
-
- # 通过css样式查找
- element = driver.find_element(By.CLASS_NAME,("text"))
- print(element.get_attribute("aria-label"))
注意:
element.text
用于获取元素的文本内容;element.get_attribute()
用于获取元素的属性值。
方法 | 说明 |
---|---|
clear | 清楚元素内容 |
send_keys("值") | 模拟按键输入 |
click | 单击元素,触发元素的点击事情 |
submit | 提交表单 |
**案例演示:**如何模拟JD商城搜索指定商品信息
- import time
- from selenium import webdriver
-
- driver = webdriver.Chrome();
- driver.get("https://search.jd.com/Search?keyword=手机")
-
- # 获取输入框
- val = driver.find_element_by_id("key")
- # 清空输入框的条件
- val.clear()
- # 重新设置查询条件
- val.send_keys("电脑")
- # 获取查询按钮并触发点击事件
- btn = val.parent.find_element_by_css_selector("button.button.cw-icon")
- btn.click()
- # 睡眠3秒
- time.sleep(3)
- # 滚动到页面底部
- # driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
- # 睡眠3秒
- # time.sleep(3)
- # 循环获取网页中电脑的名称
- names = driver.find_elements_by_css_selector("#J_goodsList > ul > li > div > div.p-name.p-name-type-2 > a > em")
- for name in names:
- print("【电脑】--",name.text)
无头模式:不打开浏览器
- import time
-
- from selenium import webdriver
-
- options = webdriver.ChromeOptions()
- options.add_argument("--headless")
- driver = webdriver.Chrome(options=options)
- driver.get("https://search.jd.com/Search?keyword=手机")
**案例演示:**模拟点击frame窗口中的按钮
- import time
-
- from selenium import webdriver
-
- driver = webdriver.Chrome()
- driver.get("https://search.jd.com/Search?keyword=手机")
-
- # 点击用户图标
- user = driver.find_element_by_class_name("tab-ico")
- user.click()
- # 睡眠2秒
- time.sleep(2)
- # 先要获取弹开的子窗口frame
- frame = driver.find_element_by_id("dialogIframe")
- # 切换到子窗口
- driver.switch_to.frame(frame)
- # 在获取子窗口中的QQ登录按钮
- driver.find_element_by_css_selector("a.pdl").click()
- from selenium import webdriver
- from selenium.webdriver.common.by import By
-
- # 初始化Chrome浏览器驱动,用于网页自动化操作
- driver = webdriver.Chrome()
-
- # 访问QQ首页
- driver.get("https://im.qq.com/index/")
-
- # 点击登录选项
- # By.ID查找id为"loginInfo"的元素并执行点击操作
- driver.find_element(By.ID,"loginInfo").click()
-
- # 切换到登录表单所在的iframe
- # 找到name为"frame-login"的iframe元素
- iframe = driver.find_element(By.NAME, "frame-login")
- # 进入iframe上下文
- driver.switch_to.frame(iframe)
-
- # 填充用户名和密码
- # 找到id为"u"的输入框并输入账号
- element = driver.find_element(By.ID,"u")
- element.send_keys("2705776545")
-
- # 找到id为"p"的输入框并输入密码
- emk = driver.find_element(By.ID,"p")
- emk.send_keys("tjt15573491551")
-
- # 点击登录按钮
- # 查找id为"login_button"的元素并点击
- element = driver.find_element(By.ID, "login_button")
- element.click()
-
- # 从iframe中切回到页面的默认内容
- driver.switch_to.default_content()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。