selenium详解(一)

1.今天来介绍下selenium(操作浏览器)的基本用法。
2.安装

>>pip install selenium

  下载chromedriver驱动,这里要注意chrome浏览器与chromedriver的版本要一致,否则运行selenium会报错。

 chromedriver版本----------支持的Chrome版本
v2.30----------------------------v58-60
v2.29----------------------------v56-58
v2.28----------------------------v55-57
v2.27----------------------------v54-56
v2.26----------------------------v53-55
v2.25----------------------------v53-55
v2.24----------------------------v52-54
v2.23----------------------------v51-53
v2.22----------------------------v49-52
v2.21----------------------------v46-50
v2.20----------------------------v43-48
v2.19----------------------------v43-47
v2.18----------------------------v43-46
v2.17----------------------------v42-43
v2.13----------------------------v42-45
v2.15----------------------------v40-43
v2.14----------------------------v39-42
v2.13----------------------------v38-41
v2.12----------------------------v36-40
v2.11----------------------------v36-40
v2.10----------------------------v33-36
v2.9------------------------------v31-34
v2.8------------------------------v30-33
v2.7------------------------------v30-33
v2.6------------------------------v29-32
v2.5------------------------------v29-32
v2.4------------------------------v29-32

3.具体使用[以baidu为实例]

3.1 get

from selenium import webdriver

##构造Chrome驱动实例  参数提供你上面下载的chromedriver.exe路径
driver=webdriver.Chrome(executable_path='D:/chromedriver/chromedriver.exe')

### 打开浏览器访问url  阻塞,直到页面加载完毕(不包括ajax加载)
driver.get("https://www.baidu.com/") 

## 打印页面源代码
print(driver.page_source)

3.2查找元素
我们要找到百度页面的输入框,并自动设置 “美女” 字符串到输入框里面。

######### 通过 id选择器查找
#element = driver.find_element_by_id("kw")
#########  通过name属性查找
#element = driver.find_element_by_name('wd')
######### 通过xpath查找
#element = driver.find_element_by_xpath('//*[@id="kw"]')
######### 通过css 选择器 查找
element = driver.find_element_by_css_selector('#kw')
## 清除输入框内容
element.clear()
## 向输入框 输入 内容
element.send_keys("美女")

执行上面代码,百度的输入框会自动输入美女两字,但是还不会提交执行搜索。

3.3模拟按键事件

## 模拟回车按钮
element.send_keys(Keys.RETURN)

## 模拟左方向键
element.send_keys(Keys.ARROW_LEFT)
## BACKSPACE按键,删除
element.send_keys(Keys.BACKSPACE)

### 还有其它的按键,大家自己看英文

3.4模拟button点击事件

## 找到 百度一下 按钮
element = driver.find_element_by_id("su")
## 模拟按钮点击
element.click()

3.5模拟js执行

#将页面滚动条拖到底部  
js="var q=document.documentElement.scrollTop=10000"  
driver.execute_script(js)  

3.6等待加载wait

有些元素 是 通过ajax 返回动态添加的,所有我们要用wait来获取。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)  # 定义等待,10s超时时间
##通过id
element = wait .until( #10之内找到元素就立刻返回,超时抛出异常
        #css 选择器
     EC.element_to_be_clickable((By.CSS_SELECTOR, "#page > a.n"))
 )
 ###################
 element_to_be_clickable:元素可点击, 时返回
 类似的还有:
 presence_of_element_located 元素加载出,传入定位元组,如(By.ID, 'p')
 visibility_of_element_located 元素可见,传入定位元组
 visibility_of 可见,传入元素对象
 presence_of_all_elements_located 所有元素加载出
 text_to_be_present_in_element 某个元素文本包含某文字
 text_to_be_present_in_element_value 某个元素值包含某文字
 frame_to_be_available_and_switch_to_it frame加载并切换
 invisibility_of_element_located 元素不可见
 element_to_be_clickable 元素可点击
 staleness_of 判断一个元素是否仍在DOM,可判断页面是否已经刷新
 element_to_be_selected 元素可选择,传元素对象
 element_located_to_be_selected 元素可选择,传入定位元组
 element_selection_state_to_be 传入元素对象以及状态,相等返回True,否则返  回False
element_located_selection_state_to_be 传入定位元组以及状态,相等返回True,否则返回False
alert_is_present 是否出现Alert

3.6设置cookie

## 设置cookie
cookie = {'name': 'foo', 'value': 'bar'}
driver.add_cookie(cookie)

3.7实例 模拟百度自动 翻页 并搜索。

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

options = webdriver.ChromeOptions()
### 去掉 "chrome正受到自动测试软件的控制" 警告框  搞了很久
options.add_argument('disable-infobars')
driver = webdriver.Chrome(executable_path='D:/chromedriver/chromedriver.exe',chrome_options=options)

## 阻塞,直到页面加载完毕(不包括ajax加载)
driver.get("https://www.baidu.com/")

## 找到 输入框
element = driver.find_element_by_css_selector('#kw')

## 清除输入框内容
element.clear()

## 向输入框 输入 内容
element.send_keys("java")

## 定义一个滚到页面到最底部的函数(因为我们每点击搜索都必须滚到到最下面,这样下一页按钮才加载)
def wait_and_scroll():
    time.sleep(3)  ## 等待3s
    ## 滚动到最底部
    js = "var q=document.documentElement.scrollTop=10000"
    driver.execute_script(js)


## 找到提交按钮
submit = driver.find_element_by_css_selector('#su')
##点击提交按钮
submit.click()

wait_and_scroll()

# 定义wait等待
wait = WebDriverWait(driver, 10)

## 模拟200次 点击下一页事件
for i in range(1,200):
    #找到下一页按钮 ,  element_to_be_clickable: 元素可以点击了
    cur_btn = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#page > a.n')))
    cur_btn.click() #模拟点击 下一页
    wait_and_scroll()

代码已经详细注释了,看了上面教程应该很好理解这个例子。以后的教程会利用这个selenium干爬虫,敬请期待,谢谢大家。

老生常谈:深圳有爱好音乐的会打鼓(吉他,键盘,贝斯等)的程序员和其它职业可以一起交流加入我们乐队一起嗨。我的QQ:657455400

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值