首页 > 编程学习 > python selenium模拟浏览器(爬虫)基础

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

发布时间:2022/5/14 15:47:46

一.selenium介绍

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

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

  • 1.Python + pycharm (都有)
  • 2.pip install selenium (在pycharm中下载selenium包)
  • 3.与浏览器版本对应的驱动 下载地址:https://www.selenium.dev/documentation/en/webdriver/driver_requirements/

三.调用驱动的方式

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()

5.2.2.行为链操作大全

在这里插入图片描述

注意事项

  • 设置等待时间,比方说有些网页一打开会有弹窗,如果不设置等待这个窗口弹出来的时间则运行不下去。
    关于等待时间,这里很全:https://blog.csdn.net/sinat_41774836/article/details/88965281

和requests区别

  • requests是直接请求服务器。这里爬虫是模拟浏览器行为。测前端的,其他工具postman,jmeter,以及用requests请求做不到这一点。
Copyright © 2010-2022 ngui.cc 版权所有 |关于我们| 联系方式| 豫B2-20100000