【自用】Python爬虫学习(七):selenium网页自动化操作

Python爬虫学习(七)


selenium介绍

selenium是一个广泛使用的开源自动化测试框架,主要用于Web应用程序的功能测试。它支持多种浏览器(如Chrome、Firefox、 Safari等)和操作系统(Windows、Mac、Linux),并允许用户通过编写代码自动执行浏览器中的操作。

Selenium可以很好地处理动态加载的Web内容,包括AJAX和JavaScript生成的元素,覆盖面更广。

selenium基础用法

python 复制代码
import time
from lxml import etree
from selenium import webdriver

# 新发地网址
url = 'http://www.xinfadi.com.cn/index.html'

# 实例化一个浏览器对象
bro = webdriver.Edge()

# 让浏览器发起一个指定url对应请求
bro.get(url)

# page_source获取浏览器当前页面的页面源码数据
# (包含所见的所有数据,无论是服务器渲染还是客户端渲染都一样)
page_text = bro.page_source
# print(page_text)

tree = etree.HTML(page_text)
tr_list = tree.xpath('//tbody[@id="ulTableBody"]/tr')
# print(tr_list[1])
for tr in tr_list:
    prodName = tr.xpath('./td[1]/text()')
    lowprice = tr.xpath('./td[2]/text()')
    avgprice = tr.xpath('./td[3]/text()')
    highprice = tr.xpath('./td[4]/text()')
    date = tr.xpath('./td[8]/text()')
    print(prodName, lowprice, avgprice, highprice, date)

time.sleep(5)
bro.quit()

运行结果:

selenium其他自动化操作

python 复制代码
import time
from selenium import webdriver

url = 'https://www.taobao.com/'

# 实例化一个浏览器对象
bro = webdriver.Edge()

# 让浏览器发起一个指定url对应请求
bro.get(url)

# 标签定位,定位到页面中的搜索框
search_input = bro.find_element(by='id', value='q')
# 标签交互,在搜索框中输入文本
search_input.send_keys('iphone')

# 执行一组js程序,右侧滑动一个页面的高度
bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
time.sleep(5)

# 点击搜索按钮
search_button = bro.find_element(by='css selector', value='.btn-search')
search_button.click()

# 重新打开一个网页
bro.get('https://www.baidu.com/')
# 回退
bro.back()
time.sleep(3)
# 前进
bro.forward()

time.sleep(5)
bro.quit()

selenium动作链与iframe的处理

bash 复制代码
"""
-selenium处理iframe
    -如果定位的标签存在于iframe标签之中,则必须使用switch_to.frame(id)
    -动作链(拖动) :from selenium.webdriver import ActionChains
        -实例化一个动作链对象:action =ActionChains(bro)
        -click_and_hold(div):长按且点击操作
        -move_by_offset(x,y)
        -perform()让动作链立即执行
        -action.release()释放动作链对象
"""
python 复制代码
import time
from selenium import webdriver
from selenium.webdriver import ActionChains

url = 'https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'

# 调用Chrome浏览器打开网页
bro = webdriver.Chrome()
bro.get(url)

# 如果定位的标签是存在于iframe标签之中的则必须通过如下操作再进行标签定位
bro.switch_to.frame('iframeResult')  # iframeResult为iframe标签的id

div = bro.find_element(by='id', value='draggable')

# 动作链
action = ActionChains(bro)
# 点击长按指定的标签
action.click_and_hold(div)

for i in range(5):
    action.move_by_offset(50, 0).perform()
    time.sleep(1)
# 释放动作链
action.release().perform()
print("程序运行完毕!")
time.sleep(3)
bro.quit()

selenium无可视化界面与反检测实现

python 复制代码
from time import sleep
from selenium import webdriver
# 实现无可视化界面
from selenium.webdriver.chrome.options import Options

# 实现无可视化界面的操作,让selenium规避被检测
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
# 实现规避检测
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])

# 无可视化界面
bro = webdriver.Chrome(options=chrome_options)
bro.get('https://www.baidu.com')
print(bro.page_source)
sleep(2)
bro.quit()
相关推荐
小oo呆3 小时前
【学习心得】Python多线程
python
happylifetree6 小时前
Python70:核心语法-函数进阶-案例2
python
王中阳Go7 小时前
两个入口答案不一致先别调模型:6 行入口口径对账表(附脚本)
人工智能·后端·python·大语言模型·1024程序员节
BK贝壳7 小时前
bool-hybrid-array 落盘我只认 .bha:用 Create_BHA / Ask_BHA 做布尔数组序列化
数据结构·python·numpy·1024程序员节
宝绿特塑业再生科技7 小时前
改性HDPE再生颗粒在户外家具挤出发泡板材中的色差控制与高品质价值重构
经验分享·科技·学习·生活·1024程序员节·户外家具
Sakura_j_h_7 小时前
Python 在定时任务里输出 emoji,UnicodeEncodeError 从哪来
开发语言·字符编码·windows·python·定时任务
supabc1239 小时前
欧盟电子发票(XRechnung/Peppol/ZUGFeRD)踩坑记:用 Python 不装 Java 跑官方校验规则
xml·python·开源·电子发票·1024程序员节
ZhengEnCi9 小时前
AI Agent工具调用防护层怎么写-一份能直接跑的Python四层拦截实现
python·llm·agent
ZhengEnCi9 小时前
AI Agent工具误调用怎么解决-从参数校验到高危二次确认的四层工程防线
python·llm·agent
andrsted10 小时前
练题簿在线免费刷题:让整理过的资料,变成能反复练习的题库
学习·微信小程序·小程序·学习方法·刷题·1024程序员节