python爬虫-selenium使用篇

1、selenium介绍
    Selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬。对于一些JavaScript动态渲染的页面来说,此种抓取方式非常有效。本节中,就让我们来感受一下它的强大之处吧。
    Selenium是调用本地浏览器直接发送请求,这样不管网站运用多么复杂的数据加载算法、加密等手段,都可以通过所见即所得来获取数据,当然这种方式的缺点就是速度比较慢,需要等待浏览器渲染出页面元素。


2、selenium安装,python与selenium版本均选择3.X以上版本
    (1)安装selenium的python支持库,使用命令  pip   install   selenium
    (2)下载并运行selenium-server服务器,官方下载地址为: http://selenium-release.storage.googleapis.com/3.11/selenium-server-standalone-3.11.0.jar,下载完成后运行 java -jar selenium-server-standalone-3.11.0.jar 启动服务,启动成功后的样子:
    
     
       编码方式:
        from   selenium   import   webdriver
        from   selenium.webdriver.common.desired_capabilities   import   DesiredCapabilities
        browser = webdriver.Remote( command_executor = 'http://127.0.0.1:4444/wd/hub' , desired_capabilities =DesiredCapabilities.CHROME)    #将使用chrome浏览器
        browser.get( ' https://www.baidu.com' ; )  

    (3)另外也可以根据你使用的浏览器,Chrome或FireFox等下载对应的driver程序,如chromedriver的下载地址为:https://chromedriver.storage.googleapis.com/index.html?path=2.37/
       编码方式:
        from   selenium   import   webdriver    #导入需要的库文件
        browser = webdriver.Chrome( executable_path = "D: \\ selenium_server \\ chromedriver" )    #这里需要指定chromedriver地址
        browser.get( ' https://www.baidu.com' ; )    #需要打开的网页

   (4)程序运行后的如下:
    

到这里为止说明你已经安装成功了。
如果你不能翻墙,无法下载所需的资源,可以到 https://download.csdn.net/download/wollzengji/10360107 这个页面去下载


3、selenium使用
    (1)简单示例
       from   selenium   import   webdriver
   from   selenium.webdriver.common.keys   import   Keys    #提供键盘按键支持
       browser =   webdriver.Chrome(executable_path="D:\\selenium_server\\chromedriver")
    browser . get ( " http://www.python.org" ; )    #打开页面
    assert   "Python"   in   browser . title    #判断title中是否含有“Python”,如果不含有将抛出异常
    elem   =   browser . find_element_by_name ( "q" )    #找到元素
    elem . clear ()    #清空输入框
    elem . send_keys ( "pycon" )    #在输入框中输入字符
    elem . send_keys ( Keys . RETURN )    #提交页面
    browser . close ()    #关闭页面quit方法将关闭整个浏览器

    (2)查找元素
        单个元素:
  • find_element_by_id
  • find_element_by_name
  • find_element_by_xpath
  • find_element_by_link_text
  • find_element_by_partial_link_text
  • find_element_by_tag_name
  • find_element_by_class_name
  • find_element_by_css_selector
        多个元素
  • find_elements_by_name
  • find_elements_by_xpath
  • find_elements_by_link_text
  • find_elements_by_partial_link_text
  • find_elements_by_tag_name
  • find_elements_by_class_name
  • find_elements_by_css_selector
示例:
browser. find_element_by_id ( 'loginForm' )    #通过id查找元素
browser. find_element_by_name ( 'username' )    #通过name来判断,将查找第一个元素,如   < input   name = "username"   type = "text"   />
browser. find_element_by_xpath ( "//form[@id='loginForm']" )    #通过xpath查找元素, 包含  id  属性并且其值为  loginForm  的form元素
browser. find_element_by_link_text ( 'Continue' )    #通过链接文本查找元素,如<a href="continue.html">Continue</a>
browser. find_element_by_tag_name ( 'h1' )    #通过标签名查找元素,如<h1>Welcome</h1>
browser. find_element_by_class_name ( 'content' )    #通过class name查找元素,如 < p   class = "content" > Site   content   goes   here .</ p >
browser. find_element_by_css_selector ( 'p.content' )    #通过CSS选择器查找元素,如 < p   class = "content" > Site   content   goes   here .</ p >

可以通过browser.find_element_by_id('loginForm').get_attribute("title")    #获取元素属性内容
browser . find_element_by_id ( 'loginForm' ). text    #获取元素文本
    
    (3)与页面交互
element . clear ()    #清空输入框
element . send_keys ( "some text" )    #在输入框中输入文本

from   selenium.webdriver.support.ui   import   Select
select   =   Select (browser . find_element_by_name ( 'name' ))    #找到select元素
select . select_by_index ( index )    #根据下标找到具体option
select . select_by_visible_text ( "text" )    #根据文本找到具体option
select . select_by_value ( value )    ##根据value找到具体option
select . deselect_all ()    #取消选中option
select . all_selected_options #获得选中的option
select . options    #获得所有的option
option . click ()    #选中option

browser. find_element_by_id ( "submit" ) . click ()    #提交表单
browser. forward ()    #在历史记录中前进
browser. back ()    #在历史记录中后退
browser.get_cookies()    #获取所有的cookie
browser . add_cookie ( { 'name' :   'name' ,   'domain' :   ' www.zhihu.com' ; ,   'value' :   'germey' } )    #添加cookie
browser . delete_all_cookies ( )    #删除所有cookie

browser. execute_script ( "window.scrollTo(0, document.body.scrollHeight);" )    #滚到页面的底部,这里是用了模拟javaScript方法

    (4)等待页面加载完成(Waits)
        现在的大多数的Web应用程序是使用Ajax技术。当一个页面被加载到浏览器时, 该页面内的元素可以在不同的时间点被加载。这使得定位元素变得困难, 如果元素不再页面之中,会抛出  ElementNotVisibleException 异常。 使用 waits, 我们可以解决这个问题。waits提供了一些操作之间的时间间隔- 主要是定位元素或针对该元素的任何其他操作。
        Selenium Webdriver 提供两种类型的waits - 隐式和显式。 显式等待会让WebDriver等待满足一定的条件以后再进一步的执行。 而隐式等待让Webdriver等待一定的时间后再去查找某元素。
    (a)显示等待:
    wait = WebDriverWait(browser ,   10 )
    imput=wait.until(EC.presence_of_element_located((By.ID ,   'tagId' )))
  button   =   wait . until ( EC . element_to_be_clickable ( ( By . CSS_SELECTOR ,   '.btn-search' ) ) )
    在抛出TimeoutException异常之前将等待10秒或者在10秒内发现了查找的元素。 WebDriverWait 默认情况下会每500毫秒调用一次ExpectedCondition直到结果成功返回。 ExpectedCondition成功的返回结果是一个布尔类型的true或是不为null的返回值。

可以通过以下元素查找内容
ID =   "id"
XPATH =   "xpath"
LINK_TEXT =   "link text"
PARTIAL_LINK_TEXT =   "partial link text"
NAME =   "name"
TAG_NAME =   "tag name"
CLASS_NAME =   "class name"
CSS_SELECTOR =   "css selector"

 等待条件及其含义
等待条件
含义
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
加载并切换
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 ,否则返回 False
element_located_selection_state_to_be
传入定位元组以及状态,相等返回 True ,否则返回 False
alert_is_present
是否出现警告
(b)隐式等待
     browser . implicitly_wait ( 10 ) # 该操作会等待10秒钟以后,在执行后续操作,除非服务器限速,不然推荐使用显示等待
   browser . get ( " http://somedomain/url_that_delays_loading" ; )


4、资料文件
官方网站: http://www.seleniumhq.org













    

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值