百度
360搜索
搜狗搜索

selenium python,selenium+python如何爬取简书网站详细介绍

本文目录一览: 如何搭建python+selenium开发环境教程讲解

这篇文章主要为大家详细介绍了python+selenium开发环境搭建的图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下web 调试工具介绍和开发环境搭建python与selenium开发环境搭建:一、下载python软件:https://www.python.org/下载完后,进行安装,安装成功后,打开IDLE(Python 3.6.2),如下图:如上图在里面输入print("Hello Wrod!")按回车,出现Hello Wrod!,说明已经把IDLE装好了,下面打开dos命令窗口输入Python按回车。如下图:出现python版本号等信息说明python已经安装成功。如果出现错误信息,则需要配置环境变量:在环境系统变量Path中添加python的安装目录,比如:C:\Python35\Scripts;C:\Python35\,这个是安装在C盘的目录。二、安装pip:https://pypi.python.org/pypi/pip下载完成后解压,打开dos命令窗口进入刚才解压后的文件夹里面(如:D:\pip-9.0.1,这个是解压后的pip文件夹)输入如下信息:输入如下信息后按回车键,进行安装,安装完后显示安装目录为:C:\Python35\Lib\site-packages\pip-9.0.1-py3.5.egg再dos命令窗口输入:pip.exe按回车,如下图:然后配置环境变量,在环境系统变量Path中添加C:\Python35\Lib\site-packages\pip-9.0.1-py3.5.egg(这个是安装在C盘的目录)。再次打开打开IDLE(Python 3.6.2)输入import selenium按回车键,如下图:如果没有找到selenium可以使用pip install -U selenium命令安装下面使用selenium打开firefox浏览器:首先到https://github.com/mozilla/geckodriver/releases下载geckodriver.exe,下载完后将该exe放入python安装根目录下(与python.exe同一目录)在IDLE(Python 3.6.2)中输入import selenium按回车,再入from selenium import webdriver按回车,最后输入browser=webdriver.Firefox()按回车键就能成功调用firefox浏览器。如图:firefox前端工具介绍:1.fireBug:FireFox浏览器下的一套开发类插件2.作用:查看页面上的元素,从而根据其属性进行定位如何安装fireBug,打开FireFox浏览器照以下图片上的操作进行安装即可:前端技术介绍:1.html:网页的基础,是一种标记语言,显示数据;2.JS:前端脚本语言,解释型语言,在页面中添加交互行为;3.xml:扩展标记语言,用来传输和存储数据4.css:层叠样式表,用来表现HTML或XML等文件样式下面使用selenium打开chrome浏览器(安装Chrome浏览器webdriver):1.安装chrome浏览器;2.下载chromedriver.exe;3.将下载的chromedriver.exe文件放到安装Chrome浏览器目录下面(如:C:\Users\Administrator\AppData\Local\Google\Chrome\Application)4.配置环境变量,将C:\Users\Administrator\AppData\Local\Google\Chrome\Application添加到环境系统变量Path中。在IDLE(Python 3.6.2)中输入import selenium按回车,再入from selenium import webdriver按回车,最后输入b=webdriver.Chrome()按回车键就能成功调用chrome浏览器。如图:

Selenium 和python是啥关系?是否相关参考文档

1、Selenium也是一个用于Web应用程序测
试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7、8、9)、MozillaFirefox、
MozillaSuite等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试
系统功能——创建衰退测试检验软件功能和用户需求。支持自动录制动作和自动生成.Net、Java、Perl等不同语言的测试脚本。Selenium是
ThoughtWorks专门为Web应用程序编写的一个验收测试工具。
2、Python(KK 英语发音:/?pa?θ?n/)是一种面向对象、直译式计算机程序设计语言。也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定。Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用。 Python语法简捷而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。
3、Selenium 和python关系,Selenium可以用python语言来调用它(Selenium RC)进行测试。
你好,很高兴为你解答。
selenium是python的一个第三方包。
关于python你可以去看廖雪峰的教程,而关于selenium你可以去参考《Selenium 2自动化测试实战》这本书。都是不错的。
selenium可以用python编写代码运行,selenium是工具,python是语言。
具体可以查看这里http://www.cnblogs.com/liu-ke/tag/selenium/
Selenium是一个web测试框架,本身应该是java开发的。
它提供了多种语言的接口,例如你可以用python去调用selenium进行web测试。
Selenium是用来做WEB与Android/IOS App自动化测试的平台,他支持使用Python作为脚本语言来编写自动化测试流程
你可以看下第二代的Selenium->Appium的官网
http://appium.io/introduction.html
Selenium是一个软件测试工具; python是一种面向对象、直译式计算机程序设计语言.
Selenium分成Selenium IDE, Selenium RC (Remote Control), 和Selenium Grid. 他们都是基于Selenium Core的. 这里给你说说Selenium IDE和RC吧. Selenium IDE是Firefox的一个插件, 它可以录制一系列的过程(比如google中输入一个单词, 点搜索按钮,...,). Selenium IDE可以把这个过程录制号, 并且转化成多种语言, 比如:Java, C#, Perl, PHP, Python,等等吧.
那么这时候我们就可以这些语言对应的编译器(比如Java我们用ECLIPSE; C#用Visual Studio)把从Selenium IDE经过录制, 得到并转化好的程序代码在这些编译器里运行, 运行的时候, 程序会调用Selenium RC来实现对刚才这段过程录制的远程操作 (可以控制打开一个firefox或者IE的浏览器进行回放, 也就是测试的过程.
简单地说就是 Selenium可以用python语言来调用它(Selenium RC)进行测试.
不知道我说明白了没有.

如何在python中使用selenium

网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
1、下载Python2.7版本,默认运行安装即可;
2、安装完成之后,设置Python环境变量C:\Python27(操作步骤: 电脑->属性->高级->环境变量->系统变量中的PATH为:变量值: ;C:\Python27 )
3、在python的官方网站上可以找到SetupTools的下载,解压安装安装即可;
4、当安装SetupTools之后,就可以在python安装目录下看到Script目录,
5、同样在变量中加入 path:C:\Python27\Scripts,
6、打开cmd命令行,将目录切换到C:\Python27\Scripts下,输入命令“easy_install pip“安装pip;
7、安装成功pip之后,执行pip install -U selenium 进行下载安装最新selenium的版本。

从零开始学python爬虫(八):selenium提取数据和其他使用方法

知识点:
知识点:了解 driver对象的常用属性和方法
注意:最新版本的selenium已经取消了这种格式,取而代之的是:
你要先导入:
然后再:
知识点:掌握 driver对象定位标签元素获取标签对象的方法

代码实现,如下,获取腾讯新闻首页的新闻标签的内容。
知识点:掌握 元素对象的操作方法

参考代码示例:
知识点:掌握 selenium控制标签页的切换

知识点:掌握 selenium控制frame标签的切换
知识点:掌握 利用selenium获取cookie的方法
知识点:掌握 selenium控制浏览器执行js代码的方法

知识点:掌握 手动实现页面等待

知识点:掌握 selenium开启无界面模式

知识点:了解 selenium使用代理ip

知识点:了解 selenium替换user-agent

用python写爬虫程序怎么调用工具包selenium

一、什么是Selenium
selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。
selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。
二、selenium基本使用
用python写爬虫的时候,主要用的是selenium的Webdriver,我们可以通过下面的方式先看看Selenium.Webdriver支持哪些浏览器
执行结果如下,从结果中我们也可以看出基本山支持了常见的所有浏览器:
这里要说一下比较重要的PhantomJS,PhantomJS是一个而基于WebKit的服务端JavaScript API,支持Web而不需要浏览器支持,其快速、原生支持各种Web标准:Dom处理,CSS选择器,JSON等等。PhantomJS可以用用于页面自动化、网络监测、网页截屏,以及无界面测试
声明浏览器对象
上面我们知道了selenium支持很多的浏览器,但是如果想要声明并调用浏览器则需要:
from selenium import webdriverbrowser = webdriver.Chrome()browser = webdriver.Firefox()
这里只写了两个例子,当然了其他的支持的浏览器都可以通过这种方式调用
访问页面
from selenium import webdriverbrowser = webdriver.Chrome()browser.get("httidu.com")print(browser.page_source)browser.close()
上述代码运行后,会自动打开Chrome浏览器,并登陆百度打印百度首页的源代码,然后关闭浏览器
查找元素
单个元素查找
from selenium import webdriverbrowser = webdriver.Chrome()browser.get("bao.com")input_first = browser.find_element_by_id("q")input_second = browser.find_element_by_css_selector("#q")input_third = browser.find_element_by_xpath('//*[@id="q"]')print(input_first)print(input_second)print(input_third)browser.close()
这里我们通过三种不同的方式去获取响应的元素,第一种是通过id的方式,第二个中是CSS选择器,第三种是xpath选择器,结果都是相同的。结果如下:
这里列举一下常用的查找元素方法:
find_element_by_namefind_element_by_idfind_element_by_xpathfind_element_by_link_textfind_element_by_partial_link_textfind_element_by_tag_namefind_element_by_class_namefind_element_by_css_selector
下面这种方式是比较通用的一种方式:这里需要记住By模块所以需要导入from selenium.webdriver.common.by import By
from selenium import webdriverfrom selenium.webdriver.common.by import Bybrowser = webdriver.Chrome()browser.get("obao.com")input_first = browser.find_element(By.ID,"q")print(input_first)browser.close()
当然这种方法和上述的方式是通用的,browser.find_element(By.ID,"q")这里By.ID中的ID可以替换为其他几个
多个元素查找
其实多个元素和单个元素的区别,举个例子:find_elements,单个元素是find_element,其他使用上没什么区别,通过其中的一个例子演示:
from selenium import webdriverbrowser = webdriver.Chrome()browser.get("obao.com")lis = browser.find_elements_by_css_selector('.service-bd li')print(lis)browser.close()
这样获得就是一个列表
当然上面的方式也是可以通过导入from selenium.webdriver.common.by import By 这种方式实现
lis = browser.find_elements(By.CSS_SELECTOR,'.service-bd li')
同样的在单个元素中查找的方法在多个元素查找中同样存在:find_elements_by_namefind_elements_by_idfind_elements_by_xpathfind_elements_by_link_textfind_elements_by_partial_link_textfind_elements_by_tag_namefind_elements_by_class_namefind_elements_by_css_selector
元素交互操作
对于获取的元素调用交互方法
from selenium import webdriverimport timebrowser = webdriver.Chrome()browser.get("bao.com")input_str = browser.find_element_by_id('q')input_str.send_keys("ipad")time.sleep(1)input_str.clear()input_str.send_keys("MakBook pro")button = browser.find_element_by_class_name('btn-search')button.click()
运行的结果可以看出程序会自动打开Chrome浏览器并打开淘宝输入ipad,然后删除,重新输入MakBook pro,并点击搜索
交互动作
将动作附加到动作链中串行执行
from selenium import webdriverfrom selenium.webdriver import ActionChainsbrowser = webdriver.Chrome()url = "ry/try.php?filename=jqueryui-api-droppable"browser.get(url)browser.switch_to.frame('iframeResult')source = browser.find_element_by_css_selector('#draggable')target = browser.find_element_by_css_selector('#droppable')actions = ActionChains(browser)actions.drag_and_drop(source, target)actions.perform()
执行JavaScript
这是一个非常有用的方法,这里就可以直接调用js方法来实现一些操作,下面的例子是通过登录知乎然后通过js翻到页面底部,并弹框提示
from selenium import webdriverbrowser = webdriver.Chrome()browser.get("u.com/explore")browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')browser.execute_script('alert("To Bottom")')
获取元素属性get_attribute('class')
from selenium import webdriverbrowser = webdriver.Chrome()url = 'hihu.com/explore'browser.get(url)logo = browser.find_element_by_id('zh-top-link-logo')print(logo)print(logo.get_attribute('class'))
获取文本值text
from selenium import webdriverbrowser = webdriver.Chrome()url = 'com/explore'browser.get(url)input = browser.find_element_by_class_name('zu-top-add-question')print(input.text)
获取ID,位置,标签名idlocationtag_namesize
from selenium import webdriverbrowser = webdriver.Chrome()url = 'com/explore'browser.get(url)input = browser.find_element_by_class_name('zu-top-add-question')print(input.id)print(input.location)print(input.tag_name)print(input.size)
Frame
在很多网页中都是有Frame标签,所以我们爬取数据的时候就涉及到切入到frame中以及切出来的问题,通过下面的例子演示这里常用的是switch_to.from()和switch_to.parent_frame()
import timefrom selenium import webdriverfrom selenium.common.exceptions import NoSuchElementExceptionbrowser = webdriver.Chrome()url = 'oob.com/try/try.php?filename=jqueryui-api-droppable'browser.get(url)browser.switch_to.frame('iframeResult')source = browser.find_element_by_css_selector('#draggable')print(source)try:logo = browser.find_element_by_class_name('logo')except NoSuchElementException: print('NO LOGO')browser.switch_to.parent_frame()logo = browser.find_element_by_class_name('logo')print(logo)print(logo.text)
等待
当使用了隐式等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常, 换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0
隐式等待到了一定的时间发现元素还没有加载,则继续等待我们指定的时间,如果超过了我们指定的时间还没有加载就会抛出异常,如果没有需要等待的时候就已经加载完毕就会立即执行
from selenium import webdriverbrowser = webdriver.Chrome()browser.implicitly_wait(10)browser.get('com/explore')input = browser.find_element_by_class_name('zu-top-add-question')print(input)
显示等待
指定一个等待条件,并且指定一个最长等待时间,会在这个时间内进行判断是否满足等待条件,如果成立就会立即返回,如果不成立,就会一直等待,直到等待你指定的最长等待时间,如果还是不满足,就会抛出异常,如果满足了就会正常返回
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECbrowser = webdriver.Chrome()browser.get('.taobao.com/')wait = WebDriverWait(browser, 10)input = wait.until(EC.presence_of_element_located((By.ID, 'q')))button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search')))print(input, button)
上述的例子中的条件:EC.presence_of_element_located()是确认元素是否已经出现了EC.element_to_be_clickable()是确认元素是否是可点击的
常用的判断条件:title_is 标题是某内容title_contains 标题包含某内容presence_of_element_located 元素加载出,传入定位元组,如(By.ID, 'p')visibility_of_element_located 元素可见,传入定位元组visibility_of 可见,传入元素对象presence_of_all_elements_located 所有元素加载出text_to_be_present_in_element 某个元素文本包含某文字text_to_be_present_in_element_value 某个元素值包含某文字frame_to_be_available_and_switch_to_it frame加载并切换invisibility_of_element_located 元素不可见element_to_be_clickable 元素可点击staleness_of 判断一个元素是否仍在DOM,可判断页面是否已经刷新element_to_be_selected 元素可选择,传元素对象element_located_to_be_selected 元素可选择,传入定位元组element_selection_state_to_be 传入元素对象以及状态,相等返回True,否则返回Falseelement_located_selection_state_to_be 传入定位元组以及状态,相等返回True,否则返回Falsealert_is_present 是否出现Alert
浏览器的前进和后退
back()forward()
import timefrom selenium import webdriverbrowser = webdriver.Chrome()browser.get('ww.baidu.com/')browser.get('aobao.com/')browser.get('ww.python.org/')browser.back()time.sleep(1)browser.forward()browser.close()
cookie操作
get_cookies()delete_all_cookes()add_cookie()
from selenium import webdriverbrowser = webdriver.Chrome()browser.get('om/explore')print(browser.get_cookies())browser.add_cookie({'name': 'name', 'domain': 'www.zhihu.com', 'value': 'zhaofan'})print(browser.get_cookies())browser.delete_all_cookies()print(browser.get_cookies())
选项卡管理
通过执行js命令实现新开选项卡window.open()不同的选项卡是存在列表里browser.window_handles通过browser.window_handles[0]就可以操作第一个选项卡
import timefrom selenium import webdriverbrowser = webdriver.Chrome()browser.get('baidu.com')browser.execute_script('window.open()')print(browser.window_handles)browser.switch_to_window(browser.window_handles[1])browser.get('bao.com')time.sleep(1)browser.switch_to_window(browser.window_handles[0])browser.get('hon.org')
异常处理
这里只进行简单的演示,查找一个不存在的元素
from selenium import webdriverfrom selenium.common.exceptions import TimeoutException, NoSuchElementExceptionbrowser = webdriver.Chrome()try:browser.get('du.com')except TimeoutException: print('Time Out')try:browser.find_element_by_id('hello')except NoSuchElementException: print('No Element')finally:browser.close()
所有的努力都值得期许,每一份梦想都应该灌溉!

阅读更多 >>>  什么是python编程语言的简单介绍

selenium+python如何爬取简书网站

jianshu首页打开chrome的开发者模式,发现文章的标题,href都在a标签里,似乎也没有什么不一样的a.png接下来就是寻找页面上所有的a标签,但是且慢如果你仔细观察就会发现滑轮滚到一半的时候页面就会加载更多,这样的步骤会重复三次知道底部出现阅读更多的按钮滑轮不仅如此底部的阅读更多的href并没有告诉我们加载剩下的页面信息,唯一的办法是不断点击阅读更多这个按钮load_more.png什么,将滑轮重复三次滑倒页面的中央并且不断点击按钮这种操作http请求可做不到,这更像是js操作?没错,简书的文章并不是常规的http请求,我们不能根据不同url不断重定向,而是页面的一些动作来加载页面信息。selenium介绍selenium是一个web自动化测试工具,支持很多种语言,我们在这里可以使用python的selenium做爬虫使用,爬取简书的过程中,它的工作原理是不断注入js代码,让页面源源不断的加载,最后再提取所有的a标签。首先你得在python中下载selenium包>>> pip3 install seleniumchromedriverselenium必须搭载浏览器使用,这里我使用的是chromedriver,Chrome的开源测试版,它可以使用headless模式不需要显示前段来访问网页,算是最大特性了。python中操作在写代码之前一定要把chromedriver同一文件夹内,因为我们需要引用PATH,这样方便点。首先我们的第一个任务是刷出加载更多的按钮,需要做3次将滑轮重复三次滑倒页面的中央,这里方便起见我滑到了底部from selenium import webdriverimport timebrowser = webdriver.Chrome("./chromedriver")browser.get("https://www.jianshu.com/")for i in range(3): browser.execute_script("window.scrollTo(0, document.body.scrollHeight);") // execute_script是插入js代码的 time.sleep(2) //加载需要时间,2秒比较合理看看效果刷出了按钮接下来就是不断点击按钮加载页面,继续加入刚才的py文件之中for j in range(10): //这里我模拟10次点击 try: button = browser.execute_script("var a = document.getElementsByClassName('load-more'); a[0].click();") time.sleep(2) except: pass''' 上面的js代码说明一下 var a = document.getElementsByClassName('load-more');选择load-more这个元素 a[0].click(); 因为a是一个集合,索引0然后执行click()函数'''这个我就不贴图了,成功之后就是不断地加载页面 ,知道循环完了为止,接下来的工作就简单很多了,就是寻找a标签,get其中的text和href属性,这里我直接把它们写在了txt文件之中.titles = browser.find_elements_by_class_name("title")with open("article_jianshu.txt", "w", encoding="utf-8") as f: for t in titles: try: f.write(t.text + " " + t.get_attribute("href")) f.write("") except TypeError: pass最终结果简书文章headless模式不断加载页面肯定也很烦人,所以我们测试成功之后并不想把浏览器显示出来,这需要加上headless模式options = webdriver.ChromeOptions()options.add_argument('headless')browser = webdriver.Chrome("./chromedriver", chrome_options=options) //把上面的browser加入chrome_options参数总结当我们没办法使用正常的http请求爬取时,可以使用selenium操纵浏览器来抓取我们想要的内容,这样有利有弊,比如优点可以暴力爬虫简书并不需要cookie才能查看文章,不需要费劲心思找代理,或者说我们可以无限抓取并且不会被ban首页应该为ajax传输,不需要额外的http请求缺点爬取速度太满,想象我们的程序,点击一次需要等待2秒那么点击600次需要1200秒, 20分钟...附加这是所有完整的代码from selenium import webdriverimport timeoptions = webdriver.ChromeOptions()options.add_argument('headless')browser = webdriver.Chrome("./chromedriver", chrome_options=options)browser.get("https://www.jianshu.com/")for i in range(3): browser.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(2)# print(browser)for j in range(10): try: button = browser.execute_script("var a = document.getElementsByClassName('load-more'); a[0].click();") time.sleep(2) except: pass#titles = browser.find_elements_by_class_name("title")with open("article_jianshu.txt", "w", encoding="utf-8") as f: for t in titles: try: f.write(t.text + " " + t.get_attribute("href")) f.write("") except TypeError: pass相关推荐:

从零开始学Python-使用Selenium抓取动态网页数据

您可以按照以下步骤来配置八爪鱼采集器进行数据采集:1. 打开八爪鱼采集器,并创建一个新的采集任务。2. 在任务设置中,输入要采集的网址作为采集的起始网址。3. 配置采集规则。可以使用智能识别功能,让八爪鱼自动识别页面的数据结构,或者手动设置采集规则。4. 如果手动设置采集规则,可以通过鼠标选择页面上的数据元素,并设置相应的采集规则,以确保正确获取所需的数据。5. 设置翻页规则。如果需要采集多页数据,可以设置八爪鱼采集器自动翻页,以获取更多的数据。6. 运行采集任务。确认设置无误后,可以启动采集任务,让八爪鱼开始采集数据。7. 等待采集完成。八爪鱼将根据设置的规则自动抓取页面上的数据,并将其保存到本地或导出到指定的数据库等。八爪鱼采集器是一款功能全面、操作简单、适用范围广泛的互联网数据采集器,可以帮助您轻松解决数据采集问题。了解更多八爪鱼采集器的功能和使用方法,请前往官网教程与帮助了解更多详情。
  AJAX(Asynchronouse JavaScript And XML:异步JavaScript和XML)通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新,这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行局部更新。传统的网页(不使用Ajax)如果需要更新内容,必须重载整个网页页面。
  因为传统的网页在传输数据格式方面,使用的是 XML 语法,因此叫做 AJAX ,其实现在数据交互基本上都是使用 JSON 。使用AJAX加载的数据,即使使用了JS将数据渲染到了浏览器中,在 右键->查看网页源代码 还是不能看到通过ajax加载的数据,只能看到使用这个url加载的html代码。
  法1:直接分析ajax调用的接口。然后通过代码请求这个接口。
  法2:使用Selenium+chromedriver模拟浏览器行为获取数据。
  Selenium 相当于是一个机器人。可以模拟人类在浏览器上的一些行为,自动处理浏览器上的一些行为,比如点击,填充数据,删除cookie等。 chromedriver 是一个驱动 Chrome 浏览器的驱动程序,使用他才可以驱动浏览器。当然针对不同的浏览器有不同的driver。以下列出了不同浏览器及其对应的driver:
  现在以一个简单的获取百度首页的例子来讲下 Selenium 和 chromedriver 如何快速入门:

参考:Selenium的使用

直接直接分析ajax调用的接口爬取
selenium结合lxml爬取

使用python简单封装selenium常用函数

年前走查脚本代码时,发现大家对selenium功能都在重复造轮子,而且容易出现一些常见低级bug。于是在闲暇之余,封装一些常用的selenium功能。
在某些网页中,存在多个frame嵌套。而selenium提供的find_element函数只能在当前frame中查找,不能切换到其他frame中,需要从最上级frame中逐步切换(当然也可以指定xpath的绝对路径,但是一般没人这么做)。在我们写代码过程中,需要明确知道当前frame位置和需要寻找元素的frame位置。在frame切换过程中,容易因为疏忽导致frame切换错误导致元素无法找到的bug。
页面中分布的frame,可以理解为树状结构。因此我们可以采用递归的方式, 沿着某条搜索路线frame节点,依次对树中每个节点均做一次访问。
我们以163网址上的登录框为例:点击登录按钮,弹出登录iframe页面。输入框位置在iframe中,因此我们不能使用xpath获取元素位置,需要进入iframe中,然后获取元素。
手动切换ifame可能会产生bug,因此需要一套自动切换和检索frame的机制。具体代码如下:
需要注意的是:如果页面中多个frame中,存在相同的xpath元素。还是需要指定frame的路径,否则会返回搜索到的第一个元素。
强制等待
直接调用系统time.sleep函数,不管页面加载情况一定会等待指定的时间, 即使元素已被加载 。
1.如果设置的时间较长,会浪费时间
2.如果设置的时间较短,元素可能没有加载。
页面中某元素如果未能立即加载,隐式等待告诉WebDriver需等待一定的时间,然后去查找元素。默认不等待,隐式等待作用于整个WebDriver周期,只需设置一次即可。
1.在上文的find_element函数中,采用递归方式在所有frame寻找元素。若采用隐式等待,则在每个frame中都需要等待设定的时间,耗时非常长。
2.某些页面我们想要的元素已经加载完毕,但是部分其他资源未加载。隐式等待必须等待所有元素加载完毕,增加额外等待时间。
显示等待一般作用于某一个元素,在设定的时间范围内,默认每间隔0.5秒查找元素。返回被加载的元素,若超过设定的时间范围未能查找则报错。显示等待作为selenium常用的等待机制,我们来看下他的源码和机制。
driver 注释中解释为WebDriver实例,但是代码中并未有相关检测,因此可以传入任何对象
但是__repr__函数中使用到session_id属性,如果需要显示属性或者转为str对象,最好在driver对象中添加session_id属性
在until函数中,我们可以看到driver对象传入method函数。在计时结束前,在不断循环执行method函数,如果method函数有正常返回值则退出循环,否则报TimeoutException错误。
可以采用装饰器对隐式等待进行封装,这样代码更加精简
同样的,采用装饰器对其他常用的函数进行封装,例如强制等待、点击、输入文本等。
装饰器虽然很方便,但也会产生一些麻烦。例如在find_element函数递归调用过程中,理应只要执行一次装饰器函数。但因为装饰器已经装饰完毕,导致每次递归都会执行。例如强制等待的sleep函数,如果递归次数越多等待时间越长。
解除装饰器一般有两种做法:一是约定参数,当递归第二次调用时则不生效。例如
这种方式实现简单,容易理解。但是增加了参数限制,在fun函数中就不能使用first_sleep参数。
二是采用装饰器采用wrapped实现,通过访问wrapped属性获得原始函数。例如
但是某一个函数被多个装饰器装饰时,需要递归解除装饰器。例如
最后整体代码如下
这次的封装其实还存在很多问题
1.find_element函数不仅仅只是提供查找元素功能,还提供一些其他功能,因此叫element_operation更为合适。
2.find_element函数的参数过多,并且很多参数的使用并不在函数本身中,对代码阅读很不友好。
3.得小心避免参数重复问题,假设装饰器sleep和装饰器wait_time都使用time这个参数,将无法区分具体是哪个函数使用。
4.不利于扩展和维护,当功能过多时find_element的参数过于庞大。
如果只是简单地封装和使用,上面这种方式也能达到较好的效果。如果想进一步封装,建议采用链式调用方式,装饰器辅助封装。例如
这样函数的扩展性和可阅读性有较大的提升

如何在python中使用selenium

selenium简介
selenium提供了一个通用的接口,可模拟用户来操作浏览器,比如用于自动化测试等.selenium的核心是WebDriver,它提供了一组接口,这些接口能够操作各种跨平台的浏览器.各大浏览器厂商.
各大浏览器厂商也支持Selenium,将其作为浏览器的一部分.
selenium工具集提供了WebDriver,Selenium IDE,Selenium-Grid等
Selenium 1.0 + WebDriver = Selenium 2.0
Selenium WebDriver是Selenium Remote Control(Selenium-RC)的继承者.
WebDriver提供了更简单和简洁的接口,克服了Selenium-RC API一些限制.
相比Selenium 1.0,WebDriver是面向对象式的服务.
WebDriver驱动浏览器更有效率,提供了比Selenium 1.0更多的功能
Selenium RC只能在单机上运行,WebDriver则提供了远程操作的功能
selenium基本使用
selenium运行需要什么
主要包括三部分:selenium selenium,浏览器driver,浏览器selenium selenium是一组通用的接口,而不同的浏览器提供其自身的driver(大部分是官方的),浏览器则被模拟控制操作的终端.
安装
pip install selenium --upgradeapt-get install chromium-browserwget http://chromedriver.storage.googleapis.com/2.10/chromedriver_linux`getconf LONG_BIT`.zipunzip chromedriver_linux32.zipcp chromedriver /usr/local/sharechmod +x /usr/local/share/chromedriverln -s /usr/local/share/chromedriver /usr/local/bin/chromedriverln -s /usr/bin/chromedriver /usr/local/share/chromedriver简单的使用
from selenium import webdriverdriver = webdriver.Chrome('/usr/local/bin/chromedriver')driver.get('http://mail.sina.net');print(driver.title)API使用
可参考/usr/local/lib/python2.7/dist-packages/selenium
Chrome WebDriver
selenium.webdriver.chrome.webdriver.WebDriver(executable_path='chromedriver', port=0, chrome_options=None, service_args=None, desired_capabilities=None, service_log_path=None)
ChromeOptions
可以通过ChromeDriver session配置ChromeDriver sessionChromeDriverconvenient methods for setting ChromeDriver-specific capabilities
from selenium.webdriver.chrome.options import Optionschrome_options = Options()chrome_options.add_argument("--disable-extensions")chrome_options.add_argument('--disable-logging')chrome_options.add_experimental_option('prefs', {'download.default_directory':'/tmp'})chrome_options.binary_location='/usr/bin/chromium-browser'driver = webdriver.Chrome(chrome_options=chrome_options)直接使用DesiredCapabilities
ChromeOptions是构建在DesiredCapabilities之上的,为了使用DesiredCapabilities,必须知道capability的Key/value对.
chrome_options = Options()capabilities={}capabilities['platform'] = "WINDOWS"capabilities['version'] = "10"capabilities.update(chrome_options.to_capabilities())driver = webdriver.Chrome(desired_capabilities=capabilities)chromedriver运行方式
The ChromeDriver class不断的创建实例,会浪费很多的时间,可以通过两个方式解决.
使用ChromeDriverService
import selenium.webdriver.chrome.service as serviceservice = service.Service('/usr/bin/chromedrive')service.start()capabilities = { }driver = webdriver.Remote(service.service_url, capabilities)driver.get('http://mail.sina.net');print(driver.title)开启单独的ChromeDriver服务
./chromedriverdriver = webdriver.Remote('http://127.0.0.1:9515', DesiredCapabilities.CHROME)driver.get('http://mail.sina.net');RemoteWebDriverServer
The RemoteWebDriver is composed of two pieces: a client and a server. The client is your WebDriver test and the server is simply a Java servlet, which can be hosted in any modern JEE app server. The server will always run on the machine with the browser you want to test.
wget http://selenium-release.storage.googleapis.com/2.53/selenium-server-standalone-2.53.0.jarjava -jar selenium-server-standalone-2.53.0.jarfrom selenium import webdriverfrom selenium.webdriver.common.desired_capabilities import DesiredCapabilitiesdriver = webdriver.Remote( command_executor='http://127.0.0.1:4444/wd/hub',desdesired_capabilities=DesiredCapabilities.CHROME)driver.get('http://mail.sina.net');

阅读更多 >>>  keras和tensorflow,Python深度学习中keras,tensorflow,scikit-learn哪个好用?

关于Python中如何使用Selenium模拟JQuery滑动解锁的实例分析

这篇文章主要介绍了Python中Selenium模拟JQuery滑动解锁实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下本文介绍了Python中Selenium模拟JQuery滑动解锁实例,分享给大家,也给自己留个笔记滑动解锁一直做UI自动化的难点之一,我补一篇滑动解锁的例子,希望能给初做Web UI自动化测试的同学一些思路。首先先看个例子。当我手动点击滑块时,改变的只是样式:1、slide-to-unlock-handle 表示滑块,滑块的左边距在变大(因为它在向右移动嘛!)2、Slide-tounlock-progress 表示滑过之后的背景黄色,黄色的宽度在增加,因为滑动经过的地方都变黄了。除些之外,没其它任何变化了,所以我们利用鼠标的拖动貌似不行!因为鼠标的拖动是将一个元素移动到另一个元素上。这样:# 定位元素的原位置element = driver.find_element_by_id("xx")# 定位元素要移动到的目标位置target = driver.find_element_by_id("xx")ActionChains(driver).drag_and_drop(element, target).perform()但在我手动演示的过程中,元素的位置并没有发生变化。接下来看我是怎么实现的。from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium.common.exceptions import UnexpectedAlertPresentExceptionfrom time import sleepdriver = webdriver.Chrome()driver.get("https://www.helloweba.com/demo/2017/unlock/")dragger = driver.find_elements_by_class_name("slide-to-unlock-handle")[0]action = ActionChains(driver)action.click_and_hold(dragger).perform() #鼠标左键按下不放for index in range(200): try: action.move_by_offset(2, 0).perform() #平行移动鼠标 except UnexpectedAlertPresentException: break action.reset_actions() sleep(0.1) #等待停顿时间# 打印警告框提示success_text = driver.switch_to.alert.textprint(success_text)sleep(5)driver.quit()driver.find_elements_by_class_name("slide-to-unlock-handle")[0]首先,我要操作的页面上有好几个滑块,我先通过通过class属性找到所有的里面的第一个。click_and_hold()通过click_and_hold()方法对滑块按下鼠标左键。move_by_offset()接下来就是通过for循环动滑块的位置,move_by_offset()方法第一个参数是X轴,第二个参数是Y轴,单位为像素。因为是平行移动,所以Y设置为0。 X每次移动两2个像素。当解锁成功后会抛UnexpectedAlertPresentException异常,捕捉后跳出循环。每次循环休眠0.1秒,时间间隔越小,移动越顺滑哟!核心的几步介绍完了,接下来就是获取警告框上面的提示信息并打印,然后关闭浏览器。打印结果为:successfully unlock!

网站数据信息

"selenium python,selenium+python如何爬取简书网站"浏览人数已经达到22次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:selenium python,selenium+python如何爬取简书网站的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!