0


selenium和webdriver

1.简介

Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium可以直接调用浏览器,它支持所有主流的浏览器。我们可以使用selenium很容易完成之前编写的爬虫。

webdriver

可以理解它是浏览器的驱动。

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

卸载已经安装的模块:

pip uninstall 模块名

2. 浏览器对象

声明不同浏览器对象

from selenium import webdriver
browser = webdriver.Chrome()
browser = webdriver.Firefox()
browser = webdriver.PhantomJS()
browser = webdriver.Safari()
  • get(url=url) :地址栏输入url地址并确认
  • page_source :HTML结构源码
  • maximize_window():浏览器窗口最大化
  • quit():关闭浏览器
from selenium import webdriver

# 声明Chrome浏览器对象
browser = webdriver.Chrome()# 请求页面 
browser.get('https://www.taobao.com')print(browser.page_source)# 获取网页源代码# browser.close()  # 关闭当前页面

3. selenium定位元素

from selenium.webdriver.common.by import By
  • find_element(By.ID, '根据标签id属性进行定位')
  • find_element(By.NAME, '根据标签name属性进行定位')
  • find_element(By.CLASS_NAME, '根据标签class属性进行定位')
  • find_element(By.XPATH, '根据xpath语法进行定位')
  • find_element(By.CSS_SELECTOR, '根据css语法进行定位')
  • find_element(By.LINK_TEXT, '根据标签文本内容进行定位')
from selenium import webdriver 
from selenium.webdriver.common.by import By  #选择器

browser = webdriver.Chrome()
browser.get('https://taobao.com')# 通过元素ID查找 
by_id = browser.find_element(By.ID,'q')
by_id.send_keys('美食')print(by_id)# 通过css选择器查找
css_select = browser.find_element(By.CSS_SELECTOR,'#q')
css_select.send_keys('美食')# 通过xpath查找  
xpath = browser.find_element(By.XPATH,'//*[@id="q"]')
xpath.send_keys('美食')# browser.close()

4. 无界面模式

from selenium import webdriver

options = webdriver.ChromeOptions()# 添加无界面参数
options.add_argument('--headless')
browser = webdriver.Chrome(options=options)

5. 打开新窗口和切换页面

selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了

  • selenium中没有专门的打开新窗口的方法,是通过execute_script()来执行js脚本的形式来打开新窗口的。window.execute_script("window.open('https://www.douban.com/')")
  • 打开新的窗口后driver当前的页面依然还是之前的,如果想要获取新的窗口的源代码,那么就必须先切换过去。window.switch_to.window(driver.window_handles[1])
window:js的window对象
scrollTo:window的方法,可以滚到页面的任何位置
scrollHeight:是dom元素的通用属性,document.body.scrollHeight会返回body元素的高度,基本上就是页面的高度
scrollLeft:获取位于对象左边界和窗口目前可见内容的最左端之间的距离
scrollTop:获取位于对象最顶端和窗口中可见内容的最顶端之间的距离
scrollWidth:获取对象滚动的宽度
from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get('http://news.baidu.com/')
time.sleep(2)#滚动到浏览器底部
js ='window.scrollTo(0,document.body.scrollHeight)'
driver.execute_script(js)# 执行js代码
time.sleep(2)# # #滚动到顶部
js ='window.scrollTo(0,document.body.scrollTop=0)'
driver.execute_script(js)

6.

selenium-iframe

网页中嵌套了网页,先切换到

iframe

,然后再执行其他操作

  • 切换到要处理的Framebrowser.switch_to.frame(frame节点对象)
  • 在Frame中定位页面元素并进行操作
  • 返回当前处理的Frame的上一级页面或主页面# 返回上一级browser.switch_to.parent_frame()# 返回主页面browser.switch_to.default_content()

7. 操作cookie

  • 获取cookie:driver.get_cookies()
  • 根据cookie的key获取value:value = driver.get_cookie(key)
  • 删除所有的cookie:driver.delete_all_cookies()
  • 删除某个cookie:driver.delete_cookie(key)

8. 隐式等待和显式等待

  • 隐式等待:指定一个时间,在这个时间内一直会处于等待状态。隐式等待需要使用driver.implicitly_wait
  • 显式等待:指定在某个时间内,如果某个条件满足了,那么就不会再等待。显式等待用的方法是from selenium.webdriver.support.ui import WebDriverWait

9.上例子

from selenium import webdriver  # # 驱动浏览器from selenium.webdriver.common.by import By  #选择器from selenium.webdriver.common.keys import Keys   #按键from selenium.webdriver.support.wait import WebDriverWait  #等待页面加载完毕,寻找某些元素from selenium.webdriver.support import expected_conditions as EC  ##等待指定标签加载完毕# 1,驱动浏览器
browser = webdriver.Chrome()# 2,请求页面   --返回的数据封装在了browser对象里,不需要额外的变量接收
browser.get('https://www.baidu.com')#调用浏览器驱动访问站点# 3,拿到输入框# text_input = browser.find_element_by_id('kw') 
text_input = browser.find_element(By.ID,'kw')# 4,向输入框中写入内容
text_input.send_keys('爬虫')# 5,按下回车按钮 
text_input.send_keys(Keys.ENTER)# 等待事件 -- 怕网速慢
wait = WebDriverWait(browser,100)# 参数1:浏览器对象 参数2:时间(秒)# 等待某元素出现 presence_of_element_located()传入的参数格式是一个元组
wait.until(EC.presence_of_element_located((By.ID,'result_tts_player')))print(browser.current_url)#查看urlprint(browser.get_cookies())#查看cookieprint(browser.page_source)#查看源代码

browser.close()# 关闭浏览器
标签: selenium python chrome

本文转载自: https://blog.csdn.net/xuan_kong/article/details/130032485
版权归原作者 星_奕 所有, 如有侵权,请联系我们删除。

“selenium和webdriver”的评论:

还没有评论