python selenium模拟浏览器(爬虫)基础

本文介绍了Python的Selenium库用于模拟浏览器操作的基础知识,包括环境搭建、定位元素的方法如XPath,讨论了XPath的优缺点,并展示了使用行为链进行复杂操作的示例。

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

一.selenium介绍

  • 1.一种web应用程序,自动化测试工具合集
  • 2.用于:测试,屏幕抓取。浏览器模拟(爬虫)
  • 3.支持浏览器:Firefox,IE,Chrome,Safari,Opera
  • 4.以图像化方式在浏览器上录制与回访selenium脚本。 以脚本方式实现浏览器测试,支持多语言的一套API。 用于以服务的方式启动,支持远程控制,分布式部署。

二.需要下载的(环境搭建)

  • 1.Python + pycharm (都有)

  • 2.点击pychar中的view -> Tool Windows ->Terminal输入如下命令:

  • pip install selenium (在pycharm中下载selenium包)

  • 由于下载太慢导致错误可以采用镜像网站下载:(命令如下)

  • pip install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium

  • 3.与浏览器版本对应的驱动 下载地址:(https://blog.youkuaiyun.com/kenny_pj/article/details/103646745

三.调用驱动的方式

from selenium import webdriver  #导包
  • 常用方式:内部调用,驱动放在python目录下
driver = webdriver.Firefox()
  • 复杂方式:外部调用,驱动可以放在任意地方
chrome_driver = 'E:\Python\python-3.9.0-amd64\chromedriver.exe'
driver = webdriver.Chrome(executable_path=chrome_driver)

四.简单访问一个页面

from selenium import webdriver
if __name__ == '__main__':
    driver = webdriver.Firefox()    #F大写,后面打括号
    driver.get('https://www.baidu.com')
    driver.maximize_window()        #窗口最大化

    pass

五.模拟浏览器操作

5.1先定位元素

1.有8种定位方式如图,下面说说xpath

在这里插入图片描述

方式1.绝对路径 (不稳定,页面元素变动,xpath也会变)
  • 元素选择器右键选择元素–>右键复制–>复制xpath
ele = driver.find_element_by_xpath('/html/body/div[1]/div/div/div[3]/div/div[1]/a')
方式2.标签+属性定位
  • 元素 < input name=“s1” id=“t1” class=“m1” type=“text”/>

    xpath //标签[@属性=’属性值‘ and|or @属性=‘属性值’]

ele1 = driver.find_element_by_xpath("//input[@id='kw'and @class = 's_ipt' ]")

单引号内不能用单引号,用上转义字符 \

ele1 = driver.find_element_by_xpath('//input[@id=\'kw\'and @class = \'s_ipt\' ]')
  • 用此方法可以通过父标签找子标签:
father = driver.find_element_by_xpath("//select[@id='wm']")
son = father.find_element_by_xpath("//option[@value='123'")
  • 通过子标签找父标签
father = son.find_element_by_xpath('..')  #..就是返回上一级
方式3.text()
  • 百度首页有个新闻,获取这个元素可以用:
ele = driver.find_element_by_xpath('//*[text()="新闻"]')

在这里插入图片描述

方式4.模糊定位,包含:contains()
  • 点击百度首页新闻还可以:
ele = driver.find_element_by_xpath("//a[contains(@href,'news')]")  #属性后面不用=,因为这是模糊的,news.bai.com,只是包含news

在这里插入图片描述

方式5.starts-with(),ends-with()方式

表示以属性,属性值开头或者结尾。

2.xpath优缺点

  • 缺点:

1.用到xpath要扫描整个页面,执行起来比较慢。

2.如果页面改动较大,那定位会失效,可维护性差

  • 优点:

1.绝对路径非常方便。and|or很灵活

2.可以模糊定位:contains(),starts-with(),ends-with()

5.2再来操作

5.2.1.这里用到行为链
  • 导包:
from selenium.webdriver.common.action_chains import ActionChains
  • 驱动调用此包:
action = ActionChains(driver)
  • 操作:

点击页面元素:结尾接.perform( )代表执行

action.click(ele).perform()

这是qq音乐首页:
点击‘关闭弹窗’–悬停到‘开通vip’–>等待10s–>点击‘音乐馆’–>等待3s–>点击‘输入框’–>输入‘程璧’–>点击‘搜索’–>表演

action.click(ele).move_to_element(ele1).pause(10).click(ele2).pause(3).click(ele3).send_keys('程璧').click(ele4).perform()
  • 完整代码
from selenium import webdriver   #驱动包
from selenium.webdriver.common.action_chains import ActionChains   #行为链,操作鼠标的,键盘。
if __name__ == '__main__':
    driver = webdriver.Firefox()
    driver.implicitly_wait(5)
    driver.maximize_window()        #窗口最大化

    driver.get('https://i.y.qq.com/n2/m/')
    driver.implicitly_wait(10)

    ele = driver.find_element_by_xpath('/html/body/div[10]/div[1]/a/i[1]')
    ele1 = driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/span/div[1]')
    ele2 = driver.find_element_by_xpath('/html/body/div[1]/div/ul[1]/li[1]/a')
    ele3 = driver.find_element_by_xpath('/html/body/div[1]/div/div[1]/div[1]/input')
    ele4 = driver.find_element_by_xpath('/html/body/div[1]/div/div[1]/div[1]/button/i')

    action = ActionChains(driver)
    action.click(ele).move_to_element(ele1).pause(10).click(ele2).pause(3).click(ele3).send_keys('程璧').click(
        ele4).perform()
    pass
5.2.2.行为链操作大全

在这里插入图片描述

注意事项
和requests区别
  • requests是直接请求服务器。这里爬虫是模拟浏览器行为。测前端的,其他工具postman,jmeter,以及用requests请求做不到这一点。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zahid*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值