爬虫必备之selenium

 

selenium是一个自动化测试的工具,我不是搞那方面的,所以也在那方面的具体应用不太了解。但是,这并不影响我在爬虫和其它方面的使用。

安装: 使用pip安装就可以了。
注:使用selenium之前需要下载chromedriver.exe放入chorme安装的文件夹,并配置环境变量哦!具体自行百度解决。

具体使用:
一、.声明浏览器对象:browser = webdriver.Chrome()
二、.访问页面: browser.get('https://www.baidu.com') #访问url,也就是相当于在地址栏上访问url
其它操作:

print(browser.page_source)  #查看网页源码
print(browser.get_cookies()) #查看cookies
print(browser.current_url)  #查看url

 

三、查找元素:.

1.查找单个元素:

常用

input_1 = browser.find_element_by_id('q')  #查找id为q的那个标签包含的东西
input_2 = browser.find_element_by_css_selector('#q')  #  '#'选择id,‘.’选择class
input_3 = browser.find_element_by_xpath('//*[@id="q"]')  #使用xpath语法选择
print(input_1,input_2,input_3)

 

其它常用查找语法:

## browser.find_element_by_id
## browser.find_element_by_xpath
## browser.find_element_by_link_text   通过链接文字定位
## browser.find_element_by_partial_link_text  通过链接文字的部分文字定位
## browser.find_element_by_tag_name
## browser.find_element_by_class_name
## browser.find_element_by_css_selector

# 通用方法:  browser.find_element(a,b)   参数a填入查找方式(如By.ID),参数b填入查找的目标
# 例如:browser.find_element(By.ID,'q')

 

查找单个元素的通用方法查找:
一个例子:

browser.get('https://www.taobao.com')
input_first = browser.find_element(By.ID,'q')
#其它的按需要更改第一个参数与第二个参数、其它参数

 

2.查找多个元素

查找多个元素 在通用查找方法的基础上element加个s,代表复数即多个查找
常用:

browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
lis = browser.find_elements(By.CSS_SELECTOR,'.service-bd li')  #返回id为service-bd的标签下的所有li标签。
print(lis)

 

其它常用查找语法:

# 查找多个元素:
## browser.find_elements(By.CSS_SELECTOR,'')
## browser.find_elements(By.ID,'')
## browser.find_elements(By.LINK_TEXT,'')  通过链接文字定位
## browser.find_elements(By.PARTIAL_LINK_TEXT,'')  通过链接文字的部分文字定位
## browser.find_elements(By.TAG_NAME)
## browser.find_elements(By.XPATH)
## browser.find_elements(By.CLASS_NAME)

# browser.find_elements(a,b)   参数a填入查找方式(如By.ID),参数b填入查找的目标
# 例如:browser.find_elements(By.ID,'q li')  查找id为q的标签内的所有li标签,并返回

 

四、元素交互动作:

browser = webdriver.Chrome()
browser.get('https://www.taobao.com')

input1 = browser.find_element(By.ID,'q')  #**id为q所在的标签对应是一个搜**索框
input1.send_keys('oppo')   #将搜索框的搜索内容的值置为 'oppo',也就是在搜索框输入 oppo.
time.sleep(5)

input1.clear()  #清除搜索框

button = browser.find_element(By.CLASS_NAME,'btn-search') #查找'搜索'按钮,并创建搜索按钮对象
button.click() #点击搜索

 

五、执行JavaScript

from selenium import webdriver
import time
#实现下拉屏幕
browser = webdriver.Chrome()
browser.get('https://www.zhihu.com\explore')

browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')  #滑动到最底部
browser.execute_script('alert("complte")')  #在实现下拉功能之后,弹窗提示。

 

六、获取元素信息

1.获取属性值

logo = browser.find_element(By.ID,'zh-top-link-logo') #查找id为zh-top-link-logo的标签
logo_class = logo.get_attribute('class') 
#获取id为zh-top-link-logo的标签的class属性,并赋值给变量logo_class

 

2.获取文本值

# zu-top-add-question 为class属性的值,这里用来定位使用,定位到class属性的值为 zu-top-add-question的标签。
logo = browser.find_element(By.CLASS_NAME,'zu-top-add-question')
print(logo.text)
# 3.获取ID、位置、标签名、大小
print(logo.id)
print(logo.location)
print(logo.tag_name)
print(logo.size)

 

七、等待:
1.隐式等待
当使用了隐式等待 执行测试的时候,如果webdriver没有在DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常。
也就是当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找DOM,默认时间是0.
我觉得用来判断监测页面是否能否及时刷新和出来。

browser.implicitly_wait(10) #默认是0
browser.get('https://www.zhihu.com\explore')
input = browser.find_element(By.CLASS_NAME,'zu-top-add-question')

 

2.显示等待
人工给定一个最长等待时间,在该最长等待时间内,如果判断是True,则返回值,
如果一直是Flase,则会一直等待,若是超出最长等待时间,则返回异常。

from selenium import webdriver
from  selenium.webdriver.common.by import By
from  selenium.webdriver.support import expected_conditions as EC
from  selenium.webdriver.support.wait import WebDriverWait


browser = webdriver.Chrome()
browser.get('http://www.taobao.com/')
wait = WebDriverWait(browser,300)  #传入最长等待时间

input = wait.until(EC.presence_of_element_located((By.ID,'q')))
#定义等待条件,直到....返回True时...返回值
print(input)

 

八、 cookies
大家心里都有数的,直接上代码:

browser = webdriver.Chrome()
browser.get('https://www.zhihu.com\explore')
print(browser.get_cookies()) #获取cookies


browser.add_cookie({'name':'chenruhai','domain':'www.zhihu.com','value':'germey'})
print(browser.get_cookies())  #添加cookie之后再次查看

browser.delete_all_cookies() #删除所有cookie记录
print(browser.get_cookies()) 

 

其实还可以切换浏览器的标签页:

from selenium import webdriver
import time


browser = webdriver.Chrome()
browser.get('https://www.baidu.com/')
browser.execute_script('window.open()')  #打开(增加)下一个选项卡
print(browser.window_handles)
browser.switch_to_window(browser.window_handles[1])  #切换到第二个选项卡

browser.get('https://www.taobao.com/')
time.sleep(2)

browser.switch_to_window(browser.window_handles[0]) #切换回第一个选项卡,然后get新的url,也就是在第一个选项卡访问别的url
browser.get('https://www.python.org/')

browser.execute_script('window.open()')  #在第二个基础上,打开(增加)下一个选项卡
browser.switch_to_window(browser.window_handles[2])

 

posted @ 2019-05-06 23:37  Tony学长  阅读(165)  评论(0编辑  收藏  举报