关于selenium的使用

1. 插件安装

        http://chromedriver.storage.googleapis.com/index.html

        下载 Google webdriver  并将 webdriver 安装路径 放到python安装目录下 根据浏览器的版本下载,推荐使用谷歌浏览器

        下载selenium pip install selenium

 2.使用时机

        一般在模拟登录时遇到滑块验证码,以及部分请求库(requests)不好爬取的网站

3.基本使用方法

from selenium import webdriver

browser = webdriver.Chrome() #使用谷歌浏览器的方法,对其实例化

browser.maximize_window() # 将浏览器最大化显示
browser.minimize_window() # 将浏览器最大化显示
browser.set_window_size(600,800) # 设置浏览器宽600 高800
browser.get("https://www.baidu.com/")
browser.get("https://www.douban.com/")
browser.back()  # 后退
browser.forward()  # 前进
browser.quit()  # 关闭

4.元素定位方法

        通过id  find_element_by_id()

        通过class  find_element_class_name()

        通过name  find_element_by_name()

        通过css find_element_by_css_selector()

        通过id  find_element_by_xpath()

        前四种括号内语法与css语法相同

5.selenium动作

        

from selenium import webdriver
from selenium.webdriver import ActionChains

browser = webdriver.Chrome()
browser.get("")                #获取网站
#browser.switch_to_frame("")   #有内联框架时先获取内联框架
div = browser.find_element_by_id("")
action = ActionChains(browser)
action.click_and_hold(div)  # 长按指定标签
for i in range(15):
    action.move_by_offset(18, 0) # 没动  perform执行
# action.move_by_offset(250,0)
action.release().perform()

6.selenium等待

        第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),需要引入“time”模块,这种叫强制等待,不管你浏览器是否加载完了,程序都得等待3秒,3秒一到, 继续执行下面的代码,作为调试很有用,有时候也可以在代码里这样等待,不过不建议总用这种等待方式,太死板,严重影响程序执行速度。

        第二种办法叫隐性等待,通过添加 implicitly_wait() 方法就可以方便的实现智能等待;implicitly_wait(30) 的用法应该比 time.sleep() 更智能, 后者只能选择一个固定的时间的等待,前者可以 在一个时间范围内智能的等待。 如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。

        

第三种办法就是显性等待,WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了。 它主要的意思就是:程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException。

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
WebDriverWait(driver, 10).until(EC.title_is("百度一下,你就知道"))
'''判断title,返回布尔值'''
WebDriverWait(driver, 10).until(EC.title_contains(u"百度一下"))  # 包含 u可加可不加
上一篇:hash和history的优缺点


下一篇:可见即可爬:快速上手 Selenium