selenium 在爬虫中的简单使用

本文介绍了Selenium作为自动化测试工具在爬虫中的使用,包括其简介、快速入门、定位元素、操作表单元素(如输入框、复选框和按钮)、选择下拉菜单、行为链、多窗口和页面切换,以及显式等待和隐式等待的使用。Selenium支持多种浏览器,通过不同定位方法实现动态网页元素的交互,解决Ajax技术带来的延迟问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. selenium 的简介

2. selenium 的快速入门


# 实例化浏览器
driver = webdriver.Chrome()

# 发送请求
driver.get('https://www.baidu.com')

# 退出浏览器
driver.quit()
在这里插入代码片

3. 定位元素

  • find_element_by_id : 根据 id 来查找某个元素
  1. driver.find_element_by_id(‘kw’)
  2. driver.find_element_by_id(‘su’)
  • find_element_by_class_name : 根据类名查找元素
  1. driver.find_element_by_class_name(‘s_ipt’)
  2. driver.find_element_by_id(‘su’)
  • find_element_by_xpath : 根据xpath语法来获取元素
  1. driver.find_element_by_xpath(’//input[@id=“kw”]’)
  2. driver.find_element_by_id(‘su’)
  • find_element_tag_name : 根据标签名来查找元素
  1. driver.find_element_by_tag_name(‘div’)
  2. driver.find_element(By.TAG_NAME,‘div’)
  • find_element_by_css_selector : 根据css 选择器选取元素
  1. driver.find_element_by_css_selector(’#kw’)
  2. driver.find_element_by_css_selector(’.s_ipt’)
  3. driver.find_element_by_id(‘su’)
  • find_element 是获取第一个满足条件的元素, find_elements 是获取所有满足条件的元素

4. 操作表单元素

4.1 操作输入框:分为两步

  1. 找到输入框
  2. 使用 send_keys(values),将内容输入到输入框里面去
  • 使用clear() 可以清楚输入框的内容

Tag.clear()

4.2 操作checkbox

  • 因为要选中checkBox标签是需要点击的。因此需要使用此标签,需要先找到此标签,然后执行 click()命令
  1. rememberTag = driver.find_element_by_name(“rememberMe”)
  2. rememberTag.click()

4.3 操作按钮

  • 操作按钮有很多种方式,例如: 单击、双击、右击等。使用单击,直接调用click()函数就可以了。
  1. inputTag = driver.find_element_by_id(‘su’)
  2. inputTag.click()

4.3 选择 select

  • select 元素不能直接点击,因为点击后还要选择元素。所有,selenium 专门为 select 标签提供一个类 selenium.webdriver.support.ui import Select 将获取到的元素传到这个类中,创建这个对象。以后使用这对对象进行选择。https://www.17sucai.com/boards/53562.html
  • 实例:
from selenium import webdriver
# 对表单元素(下拉表单)进行选择的时候,需要导入以下的模块
from selenium.webdriver.support.ui import Select

# 实例化一个浏览器
driver = webdriver.Chrome()
driver.get('https://www.17sucai.com/pins/demo-show?id=5926')

# 切换ifame
iframe = driver.find_element_by_id('iframe')
driver.switch_to_frame('iframe')

# 将找到的下拉表单用Select进行包裹,然后根据select模块找到下拉表单中的内容
Select(driver.find_element_by_class_name('nojs')).select_by_value('JP')
# Select(driver.find_element_by_class_name('nojs')).select_by_index()

5. 行为链

  • 有时候在⻚⾯中的操作可能要有很多步,那么这时候可以使⽤⿏标⾏为链类 ActionChains来完成。⽐如现在要将⿏标移动到某个元素上并执⾏点击事件
# 行为链操作
# 有时候在⻚⾯中的操作可能要有很多步,那么这时候可以使⽤⿏标⾏为链类ActionChains来完成。
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

# 实例化一个浏览器
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')

# 找到搜索框
inputTag = driver.find_element_by_id('kw')
# 找到确认按钮
submitTag = driver.find_element_by_id('su')

# ⽐如现在要将⿏标移动到某个元素上
actions = ActionChains(driver)

# 鼠标移动到元素中间(输入框)
actions.move_to_element(inputTag)

# 将键发送到元素
actions.send_keys_to_element(inputTag, 'java')


# 鼠标移动到元素中间(确认按钮)
actions.move_to_element(submitTag)

# 鼠标单击(左键)
actions.click(submitTag)

# 执行所有存储的操作,该步骤必须有,否则构不成完整的行为
actions.perform()

  • 还有更多的⿏标相关的操作
  • click_and_hold(element):点击但不松开⿏标。
  • context_click(element):右键点击。
  • double_click(element):双击。
  • 更多⽅法请参考:http://selenium-python.readthedocs.io/api.html

6. 打开多窗口和切换页面

  • 有时候窗⼝中有很多⼦tab⻚⾯。这时候肯定是需要进⾏切换的。selenium 提供了⼀个叫做 switch_to_window 来进⾏切换,具体切换到哪个⻚⾯,可以 从 driver.window_handles 中找到
from selenium import webdriver

# 实例化浏览器
driver = webdriver.Chrome()

# 发送链接请求
# url1 = driver.get('https://www.baidu.com/')
url2 = driver.get('https://www.douban.com/')

# 打开新的页面
driver.execute_script('window.open("https://www.baidu.com/")')

# 切换到新页面
driver.switch_to.window(driver.window_handles[0])
# driver.switch_to_window(driver.window_handles[0])

# 根据你当前所在的页面进行关闭
driver.close()

7. 显式等待和隐式等待

现在的⽹⻚越来越多采⽤了 Ajax 技术,这样程序便不能确定何时某个元素完全 加载出来了。如果实际⻚⾯等待时间过⻓导致某个dom元素还没出来,但是你 的代码直接使⽤了这个WebElement,那么就会抛出NullPointer的异常。为了 解决这个问题。所以 Selenium 提供了两种等待⽅式:⼀种是隐式等待、⼀种 是显式等待
  • 隐式等待:调⽤ driver.implicitly_wait。那么在获取不可⽤的元素之前,会 先等待10秒中的时间

  • 显示等待:显示等待是表明某个条件成⽴后才执⾏获取元素的操作。也可以 在等待的时候指定⼀个最⼤的时间,如果超过这个时间那么就抛出⼀个异 常。显示等待应该使⽤selenium.webdriver.support.excepted_conditions 期望的条件和selenium.webdriver.support.ui.WebDriverWait来配合完成

from selenium import webdriver
2 from selenium.webdriver.common.by import By
3 from selenium.webdriver.support.ui import WebDriverWait
4 from selenium.webdriver.support import expected_conditions as EC
5
6 driver = webdriver.Chrome()
7 driver.get(“https://www.baidu.com/”)
8
9 try:
10 element = WebDriverWait(driver, 10).until(
11 EC.presence_of_element_located((By.ID, “myDynamicElement”))
12 )
13 finally:
14 driver.quit()

  • ⼀些其他的等待条件
    • presence_of_element_located:某个元素已经加载完毕了。
    • presence_of_all_elements_located:⽹⻚中所有满⾜条件的元素都加载完 毕了。
    • element_to_be_clickable:某个元素是可以点击了。

更多条件请参考:http://selenium-python.readthedocs.io/waits.html

好的,下面我将为您提供一个简单Python脚本,演示如何使用selenium爬虫京东商品。 首先,您需要安装selenium库和Chrome浏览器驱动程序,您可以使用以下命令在终端中安装它们: ``` pip install selenium ``` 然后,您需要下载适用于您的Chrome浏览器版本的ChromeDriver。您可以在以下网址中下载适用于不同操作系统的ChromeDriver: https://sites.google.com/a/chromium.org/chromedriver/downloads 下载后,将ChromeDriver解压缩并将其路径添加到环境变量中。 接下来,您可以使用以下Python代码来爬取京东商品: ```python from selenium import webdriver from selenium.webdriver.common.keys import Keys # 设置ChromeDriver路径和打开的网址 chromedriver_path = "/path/to/chromedriver" url = "https://www.jd.com/" # 打开浏览器 driver = webdriver.Chrome(chromedriver_path) driver.get(url) # 输入搜索关键字 search_box = driver.find_element_by_id("key") search_box.send_keys("手机") search_box.send_keys(Keys.RETURN) # 等待页面加载完成 driver.implicitly_wait(10) # 获取商品列表 products = driver.find_elements_by_class_name("gl-item") # 输出商品信息 for product in products: name = product.find_element_by_css_selector(".p-name em").text price = product.find_element_by_css_selector(".p-price i").text print(name, price) # 关闭浏览器 driver.quit() ``` 解释一下代码: 1. 首先,我们导入了webdriver和Keys类,后者用于模拟键盘操作。 2. 然后,我们设置了ChromeDriver的路径和要打开的网址。 3. 接着,我们打开了浏览器并访问了京东首页。 4. 我们找到了搜索框并输入了关键字“手机”,然后按下了回车键。 5. 等待页面加载完成后,我们获取了商品列表。 6. 最后,我们遍历商品列表并输出每个商品的名称和价格。 7. 最后,我们关闭了浏览器。 希望这个示例对您有所帮助!如果您需要更复杂的爬虫功能,您可以进一步研究selenium文档或使用其他Python爬虫库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值