博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小爬爬4:selenium操作
阅读量:4659 次
发布时间:2019-06-09

本文共 5630 字,大约阅读时间需要 18 分钟。

1.selenium是什么?

selenium:    - 概念:是一个基于浏览器自动化的模块。    - 和爬虫之间的关联?        - 帮我我们便捷的爬取到页面中动态加载出来的数据        - 实现模拟登陆 - 基本使用流程:        - pip install selenium        - 下载对应的驱动程序:http://chromedriver.storage.googleapis.com/index.html        - 实例化一个浏览器对象(将浏览器的驱动程序加载到该对象中)    查看驱动和浏览器版本的映射关系:
    • http://blog.csdn.net/huilan_same/article/details/51896672
- 无头浏览器:        - phantomJs    #一般不用这个        - 谷歌无头      重头戏在这个地方    - 如何规避网站对selenium监测的风险

(1)演示程序

前戏:加载驱动程序(下载),下载之前先看一下对应关系

A.选择右上角的三个点

B.选择"帮助",===>3.关于google chrome得到的结果,版本是73,因此我们需要下载驱动v2.46

 

下载第三个

这个可能需要"蓝灯"进行安装

将下载解压后的文件,放在同级目录下边,

 

这个时候,我们再次运行同级目录下的文件,就可以实现一个自动化操作了

 

from selenium import webdriverfrom time import sleep# 后面是你的浏览器驱动位置,记得前面加r'','r'是防止字符转义的driver = webdriver.Chrome(r'./chromedriver.exe')# 用get打开百度页面driver.get("http://www.baidu.com")# 查找页面的“设置”选项,并进行点击driver.find_elements_by_link_text('设置')[0].click()sleep(2)# # 打开设置后找到“搜索设置”选项,设置为每页显示50条driver.find_elements_by_link_text('搜索设置')[0].click()sleep(2)# 选中每页显示50条m = driver.find_element_by_id('nr')sleep(2)m.find_element_by_xpath('//*[@id="nr"]/option[3]').click()m.find_element_by_xpath('.//option[3]').click()sleep(2)# 点击保存设置driver.find_elements_by_class_name("prefpanelgo")[0].click()sleep(2)# 处理弹出的警告页面   确定accept() 和 取消dismiss()driver.switch_to_alert().accept()sleep(2)# 找到百度的输入框,并输入 美女driver.find_element_by_id('kw').send_keys('美女')sleep(2)# 点击搜索按钮driver.find_element_by_id('su').click()sleep(2)# 在打开的页面中找到“Selenium - 开源中国社区”,并打开这个页面driver.find_elements_by_link_text('美女_百度图片')[0].click()sleep(3)# 关闭浏览器driver.quit()

 2.

 pip install lxml

from selenium import webdriverfrom lxml import etree                                  #这个地方报红没有问题import timebro = webdriver.Chrome(executable_path='./chromedriver.exe') #打开一个空白页#让浏览器对指定url发起访问bro.get('http://125.35.6.84:81/xk/')                        #访问药监总局的网站#获取浏览器当前打开页面的页面源码数据(可见即可得)page_text = bro.page_sourcetime.sleep(2)tree = etree.HTML(page_text)name = tree.xpath('//*[@id="gzlist"]/li[1]/dl/a/text()')[0]  # 获取第一个名字print(name)time.sleep(3)bro.quit()

得到结果:爬取第一条数据

广州市科馨生物科技有限公司

 

3.selenium相关的行为动作制定

from selenium import webdriverimport timebro = webdriver.Chrome(executable_path='./chromedriver.exe')bro.get('https://www.taobao.com')#(1)节点定位 find系列的方法,定位到标签或者节点input_text = bro.find_element_by_id('q')#(2)节点交互input_text.send_keys('苹果')time.sleep(2)#(3)执行js程序(js注入)    #滚轮的拖动1屏幕的高度bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')#(4)点击搜索按钮事件btn = bro.find_element_by_css_selector('.btn-search')btn.click()time.sleep(3)bro.quit()

 

4.动作链

 

from selenium import webdriver#导入动作链对应的模块,具体用到再查看from selenium.webdriver import ActionChainsimport timebro = webdriver.Chrome(executable_path='./chromedriver.exe')bro.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')#如果定位的节点是被包含在iframes节点之中的,则必须使用switch_to进行frame的切换bro.switch_to.frame('iframeResult')#通过id进行定位div_tag = bro.find_element_by_id('draggable')#实例化一个动作链对象(需要将浏览器对象作为参数传递给该对象的构造方法)action = ActionChains(bro)#单击且长按action.click_and_hold(div_tag)for i in range(5):    #让div向右移动,移动偏移    action.move_by_offset(17,0).perform()    #perform()立即执行动作链    time.sleep(0.5)time.sleep(2)bro.quit()

 

5.谷歌无头浏览器

from selenium import webdriverfrom lxml import etreeimport timefrom selenium.webdriver.chrome.options import Optionschrome_options = Options()chrome_options.add_argument('--headless')chrome_options.add_argument('--disable-gpu')bro = webdriver.Chrome(executable_path='./chromedriver.exe',chrome_options=chrome_options)#让浏览器对指定url发起访问bro.get('http://125.35.6.84:81/xk/')#获取浏览器当前打开页面的页面源码数据(可见即可得)page_text = bro.page_sourcetime.sleep(2)tree = etree.HTML(page_text)name = tree.xpath('//*[@id="gzlist"]/li[1]/dl/a/text()')[0]print(name)time.sleep(3)bro.quit()

示例结果:

广州市科馨生物科技有限公司

 

6.如何规避网站对selenium检测的风险?

from selenium import webdriverfrom lxml import etreeimport timefrom selenium.webdriver import ChromeOptionsoption = ChromeOptions()option.add_experimental_option('excludeSwitches', ['enable-automation'])bro = webdriver.Chrome(executable_path='./chromedriver.exe',options=option)#让浏览器对指定url发起访问bro.get('http://125.35.6.84:81/xk/')#获取浏览器当前打开页面的页面源码数据(可见即可得)page_text = bro.page_sourcetime.sleep(2)tree = etree.HTML(page_text)name = tree.xpath('//*[@id="gzlist"]/li[1]/dl/a/text()')[0]print(name)time.sleep(5)bro.quit()

代码启动,不要轻易再动鼠标

 

7.qq空间模拟登陆

# Author: studybrother sunimport requestsfrom selenium import webdriverfrom lxml import etreeimport timedriver = webdriver.Chrome(executable_path='./chromedriver.exe')driver.get('https://qzone.qq.com/')# 在web 应用中经常会遇到frame 嵌套页面的应用,使用WebDriver 每次只能在一个页面上识别元素,对于frame 嵌套内的页面上的元素,直接定位是定位是定位不到的。这个时候就需要通过switch_to_frame()方法将当前定位的主体切换了frame 里。driver.switch_to.frame('login_frame')driver.find_element_by_id('switcher_plogin').click()# driver.find_element_by_id('u').clear()driver.find_element_by_id('u').send_keys('*******')  # 这里填写你的QQ号# driver.find_element_by_id('p').clear()driver.find_element_by_id('p').send_keys('********')  # 这里填写你的QQ密码driver.find_element_by_id('login_button').click()time.sleep(2)# driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')# time.sleep(2)# driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')# time.sleep(2)# driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')# time.sleep(2)# page_text = driver.page_source## tree = etree.HTML(page_text)# # 执行解析操作# li_list = tree.xpath('//ul[@id="feed_friend_list"]/li')# for li in li_list:#     text_list = li.xpath('.//div[@class="f-info"]//text()|.//div[@class="f-info qz_info_cut"]//text()')#     text = ''.join(text_list)#     print(text + '\n\n\n')driver.close()

 

转载于:https://www.cnblogs.com/studybrother/p/10952348.html

你可能感兴趣的文章
1035等差数列末项计算
查看>>
CDMA鉴权
查看>>
ASP.NET MVC Identity 兩個多個連接字符串問題解決一例
查看>>
过滤器与拦截器区别
查看>>
第二阶段站立会议7
查看>>
JAVA多线程
查看>>
delphi 更改DBGrid 颜色技巧
查看>>
POJ 2031 Building a Space Station
查看>>
任意阶幻方(魔方矩阵)C语言实现
查看>>
织梦教程
查看>>
杭电多校 Harvest of Apples 莫队
查看>>
C/C++心得-结构体
查看>>
函数名作为参数传递
查看>>
apt-get for ubuntu 工具简介
查看>>
数值计算算法-多项式插值算法的实现与分析
查看>>
day8-异常处理与网络编程
查看>>
Python基础-time and datetime
查看>>
shell脚本练习01
查看>>
WPF图标拾取器
查看>>
通过取父级for循环的i来理解闭包,iife,匿名函数
查看>>