爬虫请求库--selenium

一.介绍

1.什么是selenium?

#Selenium 是什么?一句话,自动化测试工具。它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器,
如果你在这些浏览器里面安装一个 Selenium 的插件,那么便可以方便地实现Web界面的测试。换句话说叫 Selenium 支持这些浏览器驱动。
而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题
#下面是使用一些浏览器的使用方法 from selenium import webdriver browser=webdriver.Chrome() browser=webdriver.Firefox() browser=webdriver.PhantomJS() browser=webdriver.Safari() browser=webdriver.Edge() #注意:!!!使用浏览器之前要安装响应的浏览器驱动

二.安装

#安装:selenium+chromedriver
pip3 install selenium
下载chromdriver.exe放到python安装路径的scripts目录中即可,注意最新版本是2.29,并非2.9
国内镜像网站地址:http://npm.taobao.org/mirrors/chromedriver/2.29/
最新的版本去官网找:https://sites.google.com/a/chromium.org/chromedriver/downloads

#验证安装
C:\Users\Administrator>python3
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from selenium import webdriver
>>> driver=webdriver.Chrome() #弹出浏览器
>>> driver.get('https://www.baidu.com')
>>> driver.page_source

#注意:
selenium3默认支持的webdriver是Firfox,而Firefox需要安装geckodriver
下载链接:https://github.com/mozilla/geckodriver/releases
Chrome浏览器使用
#安装:selenium+phantomjs
pip3 install selenium
下载phantomjs,解压后把phantomjs.exe所在的bin目录放到环境变量
下载链接:http://phantomjs.org/download.html

#验证安装
C:\Users\Administrator>phantomjs
phantomjs> console.log('egon gaga')
egon gaga
undefined
phantomjs> ^C
C:\Users\Administrator>python3
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from selenium import webdriver
>>> driver=webdriver.PhantomJS() #无界面浏览器
>>> driver.get('https://www.baidu.com')
>>> driver.page_source
phantomjs浏览器的使用

三.基本的使用

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #键盘按键操作
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait #等待页面加载某些元素
import time

driver=webdriver.Chrome()
# 等待所有元素加载成功(等待3秒)
driver.implicitly_wait(5)

try:
    driver.get('https://www.baidu.com')
    # 找到登录并点击
    login_button=driver.find_element_by_link_text('登录')
    login_button.click()

    # 选择使用用户名和密码登录
    username_login=driver.find_element_by_class_name('tang-pass-footerBarULogin')
    username_login.click()

    #找到用户名,密码的输入框并且找到登录的按钮
    user=driver.find_element_by_id("TANGRAM__PSP_10__userName")
    pwd=driver.find_element_by_id("TANGRAM__PSP_10__password")
    submit=driver.find_element_by_id("TANGRAM__PSP_10__submit")
    
    # 输入用户名和密码并点击登录按钮
    user.send_keys('*****(账号明文)')
    pwd.send_keys('****(密码明文)')
    submit.click()
    time.sleep(2)

finally:
    driver.close()
模拟百度登录

四.选择器

1.选择器种类

from selenium.webdriver.common.by import By
#寻找单个元素(如果存在多个,只会显示找到第一个,不存在就会报错)
find_element_by_id  #按照标签id值寻找
find_element_by_name  #如果标签存在name属性,可以使用这个方法
find_element_by_xpath  #按照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   #按照css选择器进行查找

#寻找多个元素(以列表的形式展示)

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



#另外一种写法:
from selenium.webdriver.common.by import By

driver.find_element(By.XPATH, '//button[text()="Some text"]')
driver.find_elements(By.XPATH, '//button')

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"

2.基本使用方法

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #键盘按键操作
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait #等待页面加载某些元素
import time

driver=webdriver.Chrome()
driver.get('https://www.baidu.com')
wait=WebDriverWait(driver,10)

try:
    #===============示范用法===================
    # 1、find_element_by_id
    print(driver.find_element_by_id('kw'))

    # 2、find_element_by_link_text
    # login=driver.find_element_by_link_text('登录')
    # login.click()

    # 3、find_element_by_partial_link_text
    login=driver.find_elements_by_partial_link_text('')[0]
    login.click()

    # 4、find_element_by_tag_name
    print(driver.find_element_by_tag_name('a'))

    # 5、find_element_by_class_name
    button=wait.until(EC.element_to_be_clickable((By.CLASS_NAME,'tang-pass-footerBarULogin')))
    button.click()

    # 6、find_element_by_name
    input_user=wait.until(EC.presence_of_element_located((By.NAME,'userName')))
    input_pwd=wait.until(EC.presence_of_element_located((By.NAME,'password')))
    commit=wait.until(EC.element_to_be_clickable((By.ID,'TANGRAM__PSP_10__submit')))

    input_user.send_keys('18611453110')
    input_pwd.send_keys('lhf@094573')
    commit.click()

    # 7、find_element_by_css_selector
    driver.find_element_by_css_selector('#kw')

    # 8、find_element_by_xpath

    time.sleep(5)

finally:
    driver.close()
基本使用方法

 3.元素交互

Selenium可以驱动浏览器来执行一些操作,也就是说我们可以让浏览器模拟执行一些动作,比较常见的用法有:

输入文字用send_keys()方法,清空文字用clear()方法,另外还有按钮点击,用click()方法。

例如:我们登录天猫搜索一件商品

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

browser = webdriver.Chrome()
browser.get('https://www.tmall.com')
input = browser.find_element_by_id('mq')

# 第一次搜索
input.send_keys('Mac Pro')


# 点击enter按键
input.send_keys(Keys.ENTER)

# 找到按键点击
# button=browser.find_element_by_tag_name('button')
# button.click()

time.sleep(2)

#第二次搜索
input = browser.find_element_by_id('mq')
input.clear()

input.send_keys('iphonex')

# 找到按键点击
# button=browser.find_element_by_tag_name('button')
# button.click()

# 点击enter按键
input.send_keys(Keys.ENTER)

在上述操作过程中,我们先通过浏览器打开天猫,通过find_element_by_id()方法获取输入框,然后用send_keys()方法输入要查询的内容,然后就可以点击搜索按钮了,这里可以使用梁中国方式,一种是直接点击搜索按钮,另外一种是按下enter键,注意:如果在第二个页面内想再次搜索内容,要重新进行查找标签的操作,再进行搜索

4.关于动作链的操作

 

posted @ 2018-01-11 20:30  明-少  阅读(88)  评论(0)    收藏  举报