Selenium基础-网络爬虫框架应用

安装 Selenium 库

pip install selenium

Selenium8种定位方式:

idfind_element_by_id()
namefind_element_by_name()
class namefind_element_by_class_name()
tag namefind_element_by_tag_name()
link textfind_element_by_link_text
partial link textfind_element_by_partial_link_text
xpathfind_element_by_xpath
css selectorfind_element_by_css_selector

1.访问动态页面

打印淘宝界面所有商品标题:

初始化WebDriver-打开网页-获取页面标题-查找元素-等待-退出浏览器

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time

# 加载web驱动工具
test_webdriver = webdriver.Chrome(service=Service(r"D:\workspace\utils\chromedriver-win64\chromedriver.exe"))

# 以get方式向目标发起请求
test_webdriver.get("https://www.taobao.com/")

# 获取当前浏览器的标头
print(test_webdriver.title)

# 获取页面元素信息
from selenium.webdriver.common.by import By
for item in test_webdriver.find_elements(by=By.XPATH, value="//span[@class='info-wrapper-title-text']"):
    print(item.text)

time.sleep(10)

# 浏览器退出
test_webdriver.quit()

2.访问搜索引擎 

自动打开百度并搜索关键词信息

初始化WebDriver-打开网页-查找元素-输入关键词-提交搜索-等待结果 

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time

# 加载web驱动工具
test_webdriver = webdriver.Chrome(service=Service(r"D:\workspace\utils\chromedriver-win64\chromedriver.exe"))

# 以get方式向目标发起请求
test_webdriver.get("https://www.baidu.com/")

# 获取搜索框元素并输入搜索关键词
element_input_txt = test_webdriver.find_element(By.ID, 'kw')
element_input_txt.send_keys('dilraba')

# 获取搜索按钮元素并点击
element_input_btn = test_webdriver.find_element(By.ID, 'su')
element_input_btn.click()

# 等待搜索结果页面加载
time.sleep(10)

3.鼠标控制

点击click()
右击context click()
双击double click()
拖动drag and drop()
鼠标悬停move to element()

1.悬停

打开界面,将鼠标悬停在某个按键或目录之上

初始化WebDriver-打开网页-最大化窗口-等待页面加载-执行鼠标悬停(使用ActionChains模拟鼠标悬停在设置按钮上)-等待操作

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
import time

# 加载驱动
test_webdriver = webdriver.Chrome(service=Service(r"D:\workspace\utils\chromedriver-win64\chromedriver.exe"))

# 访问目标
test_webdriver.get("https://www.baidu.com/")

# 窗口最大化
test_webdriver.maximize_window()
time.sleep(3)

# 使用XPath查找设置按钮并执行鼠标悬停操作
setting = test_webdriver.find_element(By.ID, 's-usersetting-top')
ActionChains(test_webdriver).move_to_element(setting).perform()

# 等待页面加载或进行其他操作
time.sleep(10)

# 记得在最后关闭浏览器
test_webdriver.quit()

2.点击 

用代码实现,打开界面,点击指定的按键。

setting = test_webdriver.find_element(By.XPATH, "//a[@href='http://image.baidu.com/' and text()='图片']")
setting.click()

4.网页刷新与切换

初始化WebDriver-设置窗口大小-打开百度首页-打开百度新闻页面-刷新页面-返回百度首页-前进至百度新闻页面-关闭浏览器

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time

# 加载驱动
test_webdriver = webdriver.Chrome(service=Service(r"D:\workspace\utils\chromedriver-win64\chromedriver.exe"))

# 设置窗口大小
test_webdriver.set_window_size(800, 800)

# 访问百度首页
test_webdriver.get("https://www.baidu.com/")
print("第一次打开页面")
time.sleep(5)

# 访问百度新闻页面
test_webdriver.get("https://news.baidu.com/")
print("打开百度新闻页面")
time.sleep(6)

# 刷新页面
test_webdriver.refresh()
time.sleep(7)

# 返回百度首页
test_webdriver.back()
print('返回至百度首页')
time.sleep(6)

# 页面前进至百度新闻页面
test_webdriver.forward()
print('前进至百度新闻页')
time.sleep(5)

# 关闭浏览器
test_webdriver.quit()

5.元素的显示等待

显式等待是指当某个特定条件成立时,WebDriver 才会继续执行下一条命令。

WebDriverWait设置显示等待;

until,EC场景判断,进行元素选择;

参数列表:WebDriver参数1:驱动对象,参数2:超时时长,参数3:轮询参数/检查间隔

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

test_webdriver = webdriver.Chrome(service=Service(r"D:\workspace\utils\chromedriver-win64\chromedriver.exe"))
test_webdriver.get("https://www.baidu.com/")
element = WebDriverWait(test_webdriver,5,0.5).until(EC.presence_of_element_located((By.ID,'kw')))
element.send_keys('Python')
time.sleep(5)

6.隐式等待 

隐式等待是指在WebDriver实例化后,设置一个统一的等待时间。

隐式等待是全局性的,对当前 WebDriver 实例的所有元素查找操作皆有效。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchAttributeException
import time

test_webdriver = webdriver.Chrome(service=Service(r"D:\workspace\utils\chromedriver-win64\chromedriver.exe"))

#隐式等待五秒
test_webdriver.implicitly_wait(5)

test_webdriver.get("https://www.baidu.com/")

try:
    test_webdriver.find_element(By.ID,'kw').send_keys('Python')
    time.sleep(2)
except NoSuchAttributeException as e:
    print("无此元素")
    print(e)

相比之下:隐式等待简单易用,但不够灵活,可能导致不必要的等待时间。 

而显示等待更加灵活和强大,可以根据需要等待特定的条件,提高测试的效率和稳定性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值