爬虫请求库--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
#安装: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
三.基本的使用
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.关于动作链的操作

浙公网安备 33010602011771号