微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

爬虫之selenium模块

一 介绍

selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题

selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器

from selenium import webdriver
browser=webdriver.Chrome()
browser=webdriver.Firefox()
browser=webdriver.PhantomJS()
browser=webdriver.Safari()
browser=webdriver.Edge() 

二 安装

1、有界面浏览器

#安装:selenium+chromedriver
pip3 install selenium
下载chromdriver.exe放到python安装路径的scripts目录中即可,注意最新版本是2.38,并非2.9
国内镜像网站地址:http://npm.taobao.org/mirrors/chromedriver/2.38/
最新的版本去官网找: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 @R_858_4045@ion.
>>> 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

2、无界面浏览器

PhantomJS不再更新

#安装: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 @R_858_4045@ion.
>>> from selenium import webdriver
>>> driver=webdriver.PhantomJS() #无界面浏览器
>>> driver.get('https://www.baidu.com')
>>> driver.page_source

在 PhantomJS 年久失修, 后继无人的节骨眼 
Chrome 出来救场, 再次成为了反爬虫 Team 的噩梦

自Google 发布 chrome 59 / 60 正式版 开始便支持Headless mode 

这意味着在无 GUI 环境下, PhantomJS 不再是唯一选择 

# selenium+谷歌浏览器headless模式
#selenium:3.12.0
#webdriver:2.38
#chrome.exe: 65.0.3325.181(正式版本) (32 位)


from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('window-size=1920x3000') #指定浏览器分辨率
chrome_options.add_argument('--disable-gpu') #谷歌文档提到需要加上这个属性来规避bug
chrome_options.add_argument('--hide-scrollbars') #隐藏滚动条, 应对一些特殊页面
chrome_options.add_argument('blink-settings=imagesEnabled=false') #不加载图片, 提升速度
chrome_options.add_argument('--headless') #浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
chrome_options.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" #手动指定使用的浏览器位置


driver=webdriver.Chrome(chrome_options=chrome_options)
driver.get('https://www.baidu.com')

print('hao123' in driver.page_source)

driver.close() #切记关闭浏览器,回收资源

三 基本使用

# pip3 install selenium
# 浏览器驱动:http://npm.taobao.org/mirrors/chromedriver/
# 驱动要跟浏览器版本对应  84.0.4147.105:驱动用84.0.4147.30/
# 下载完解压就是个exe(不同平台的可执行文件)

from selenium import webdriver
import time

# bro=webdriver.Chrome()  # 得到一个谷歌浏览器对象,
# 指定使用那个驱动,建议驱动放在项目根路径下
bro = webdriver.Chrome(executable_path='./chromedriver.exe')  # 得到一个谷歌浏览器对象,

time.sleep(2)
bro.get('https://www.baidu.com/')  # 在地址栏里输入了百度
time.sleep(2)
print(bro.page_source)   # 拿到页面数据
time.sleep(2)
bro.close()

四 选择器

一 基本用法

# 官网链接:http://selenium-python.readthedocs.io/locating-elements.html
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
    # 2、find_element_by_link_text
    # 3、find_element_by_partial_link_text
    # 4、find_element_by_tag_name
    # 5、find_element_by_class_name
    # 6、find_element_by_name
    # 7、find_element_by_css_selector
    # 8、find_element_by_xpath
    # 强调:
    # 1、上述均可以改写成find_element(By.ID,'kw')的形式
    # 2、find_elements_by_xxx的形式是查找到多个元素,结果为列表

    '''
    #===============示范用法===================
    # 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('xxxxxx')
    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()

示例:模拟谷歌浏览器打开百度,在搜索搜索关键字

from selenium import webdriver
import time
bro=webdriver.Chrome(executable_path='./chromedriver.exe')  # 得到一个谷歌浏览器对象,
bro.get('https://www.baidu.com/')  # 在地址栏里输入了百度
time.sleep(0.01)
input_k=bro.find_element_by_id('kw')
input_k.send_keys('美女')  # 在框里写入美女
time.sleep(2)
sou = bro.find_element_by_id('su')  # 找到搜索按钮
sou.click()  # 点击搜索按钮
time.sleep(4)
bro.close()

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐