当前位置:首页 > 话题广场 > 攻略专题 > 游戏问答

Python爬虫进阶(三):Selenium模拟浏览器操作

本节介绍如何使用selenium模拟浏览器操作,从而轻松快速地可视化网站的“级别”。

关于Selenium

前面我说过selenium是一套自动化测试工具,但是可以用于爬虫。通过Selenium操控浏览器执行操作,我们可以发出与真人用户行为完全一致的动作(因为它本就来自于浏览器)。更重要的是,selenium操作浏览器的过程是可以被编程者看见的,这也就是为什么我会用selenium+chrome作为例子(不用PhantomJS就是因为没有界面不方便观察)。

启动webdriver

本文用chromedriver举例。

前面说过selenium通过使用与浏览器对应的webdriver来驱动浏览器访问网站,而简单的启动浏览器只需要以下几行:

from selenium import webdriver DRIVERPATH="c; driver=webdriver.Chrome(DRIVERPATH) driver.get(";)

其中DRIVERPATH即是你的webdriver的路径,如果你把它写进系统的PATH里也可以不带此参数。

运行代码后,你会看到chrome启动并注明“Chrome正在受到自动测试软件的控制”,然后chrome打开百度的首页,并在几秒之后关闭。

当然,我们还可以在driver.get之前提前设置一些其他参数(本例中的options参数设置仅适用于chromedriver):

-driver.implicitly_wait(second):设置driver在查找元素时,如果元素尚未被加载则等待second秒

-ChromeOptions类的设置:

options=webdriver.ChromeOptions() o("-headless") #使用无头模式(也就是无窗口运行) o('lang=z;) #设置语言与编码 o('user-agent="你要设定的UA"') #给driver设置UA,可以用来模拟手机端访问 dic={"profile.managed_default_content_settings.images": 2} o("prefs",dic) #设置driver不加载图片 o("--proxy-server="+"代理服务器地址:端口") #添加代理IP #如果是需要带帐号密码验证的代理服务器 需要用chrome的插件解决(据说firefox的driver可以直接带参) driver=webdriver.Chrome(DRIVERPATH,options=options)#一切设置完之后,只要在启动driver时带上options就可以了

selenium查找元素

假设你已经对html有所了解,我们就不介绍了。

driver.find_element_by_class_name("class_name") #根据类名查找元素 driver.find_element_by_id("id") #根据id查找元素 driver.find_element_by_tag_name("tagname") #根据标签名查找元素 driver.find_element_by_xpath("xpath") #根据xpath查找元素 driver.find_element_by_css_selector("css") #根据css属性定位查找元素(写过前端推荐用这个) driver.find_element_by_link_text("link_name") #定位文本为link_name的超链接标签(全匹配) driver.find_element_by_partial_link_text("part_link_name") #同上,但是是部分匹配

在函数名中的element后加上一个s,会返回所有符合条件的元素的列表。

另外,还有一种查找元素的方式如下(并不是完全的例子,其他By的属性请自行学习):

from import By driver.find_elemen;#id") driver.find_elemen;tagname") driver.find_elemen;.class")

selenium模拟用户行为

执行JS

driver.execute_script("JSscript"[,seleniumElement...]) #定义 driver.execute_script("JSscript") #最基础的用法,只要把要执行的JS填进去就行了 driver.execute_script("JSscript_arguments[0]...",seleniumElement...) #进阶用法,省去使用JS选择元素的麻烦之处。传入一系列Ele并在JS中使用argument[n]表示 #在需要Element时,你可以用selenium选择元素,然后放在后面,在JS脚本里用argument[n]表示(n为你传入的元素序号)

模拟滚动条滚动

在selenium中我们通过执行js脚本来模拟滚动。

driver.execute_script("window.scrollTo(x,y)") #其x为向右滚动的像素数,y为向下滚动的像素数(两者为负则向反方向滚动)#确定距离的滚动 driver.execute_script("ele.scrollIntoView()") #滚动到ele元素出现在视窗内 #确定目标的滚动

模拟鼠标操作

模拟鼠标操作要用到selenium的ActionChains对象。设置完动作后如果想让其执行还要调用c()方法。(有些方法也能用WebElement调用,比如ele.click())

from import ActionChains chains=ActionChains() #selenium用于处理动作的类 c(ele) #点击此元素 c_and_hold(ele) #按住鼠标左键 c(ele) #点击鼠标右键 c(ele) #双击鼠标 c(from_ele,to_ele) #拖拽from_ele到to_ele c_by_offset(from_ele,xoffset,yoffset) #将from_ele拖拽到(xoffset,yoffset) c(xoffset,yoffset) #移动鼠标到(xoffset,yoffset) c(ele) #移动鼠标到元素ele c() #执行

模拟键盘操作

同上,Keys类的属性请自行寻找资料。

from import Keys c) #发送key到当前元素,其为Keys的类属性 c("string_to_send") #发送字符串到当前元素 #注意转义 c_to_element(ele,Keys.key) #发送key到el

其他常用函数

ele.submit() #提交此元素 ele.text #此元素的文本 driver.close() #关闭此窗口 driver.quit() #退出驱动 记得调用,不然chrome会撑到让你电脑死机 ele.value_of_css_property("proName") #获取元素css属性proName的值 ele. get_attribute("attrName") #获取元素属性attrName的值

1.《Python爬虫进阶(三):Selenium模拟浏览器操作》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《Python爬虫进阶(三):Selenium模拟浏览器操作》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/gl/3359684.html

上一篇

模拟人生怎么要求升职看这里!模拟人生4 - 职业晋升秘籍

模拟鼠标怎么打开网页看这里!鼠标连点器软件介绍,模拟鼠标左键右键连续点击,游戏网页都支持

模拟鼠标怎么打开网页看这里!鼠标连点器软件介绍,模拟鼠标左键右键连续点击,游戏网页都支持

模拟鼠标怎么打开网页相关介绍,你好,我是老盖。首先,感谢您收看这篇文章。这篇文章有我制作的视频。视频比较详细。还可以看我发布的视频。(大卫亚设)。 类似鼠标点击器鼠标连点器的软件有很多,我这里就是随便在网上下载了一款,大家可以随意...

模拟鼠标怎么打开网页?我来告诉你答案如何假装自己是一名大神程序员?

模拟鼠标怎么打开网页?我来告诉你答案如何假装自己是一名大神程序员?

模拟鼠标怎么打开网页相关介绍,新站局是36氪旗下的编译团队,重点介绍科学、商业、工作、生活等领域,重点介绍国外的新技术、新观点和新风向。 编者按:有的人就想成为那种伪装的高阶程序员,在他们年轻的时候,他们表现得非常酷,而且看上去很...

模拟鼠标怎么打开网页?终于找到答案了支持多点触控的触摸鼠标版下Windows10用户必学的几个手势

  • 模拟鼠标怎么打开网页?终于找到答案了支持多点触控的触摸鼠标版下Windows10用户必学的几个手势
  • 模拟鼠标怎么打开网页?终于找到答案了支持多点触控的触摸鼠标版下Windows10用户必学的几个手势
  • 模拟鼠标怎么打开网页?终于找到答案了支持多点触控的触摸鼠标版下Windows10用户必学的几个手势