龙空技术网

【python 工具】selenium 浏览器操作

甘道实研 25

前言:

现在兄弟们对“selenium定位div下拉框”大约比较注意,看官们都想要了解一些“selenium定位div下拉框”的相关内容。那么小编同时在网上收集了一些有关“selenium定位div下拉框””的相关知识,希望咱们能喜欢,大家快快来了解一下吧!

selenium的安装步骤:

1. 安装selenium,打开cmd控制台

pip install selenium

2. 安装驱动程序(我这里安装的是chromedriver),用来启动chrome浏览器,具体的驱动程序需要对应浏览器的版本

下载地址:

基本步骤:

1.导入模块

from selenium import webdriver  # 用来启动chromedriverfrom selenium.webdriver.common.keys import Keys  # 提供键盘支持

2.创建一个web实例

chrome = webdriver.Chrome('chromedriver驱动程序的路径')

3.打开页面

chrome.get(url)  # chromedriver会打开一个chrome浏览器窗口,显示为浏览的页面

4.关闭页面

chrome.close()#orchrome.quit()

以上就是selenium的基本操作了,在打开页面和关闭页面中间就是各种操作。

1.高级- 元素定位

元素的定位,和爬虫中HTML页面解析,定位到某个元素基本上差不多,只是调用者是driver

element = chrome.find_element_by_id('id')  # 通过id获取元素element = chrome.find_element_by_class('class')  # 通过class获取元素

2.高级 - 元素操作

找到需要的元素后,就是进行操作(即交互)

element.send_keys('Hello World!')  # 向可输入对象中输入内容

还可以点击提交表单按钮

element.click() # 点击提交表单

3.高级 - 窗口切换

当selenium控制浏览器打开多个标签页时,要控制浏览器在不同的标签页进行切换,需要做以下两步:

1. 获取所有标签页的窗口句柄

2. 通过窗口句柄切换到自定标签页

# 1.获取当前所有标签页的句柄构成的列表current_windows = drver,window_handles# 2.根据标签页句柄列表索引下标进行切换driver.seitch_to.window(current_windows[0])
from selenium import webdriverchrome = webdriver.Chrome()chrome.get(';)chrome.find_element_by_xpath('//*[@id="fcNav"]/em/a[1]').click()# 获取当前所有标签页的句柄current_windows = chrome.window_handles# 根据标签页句柄列表进行切换chrome.switch_to.window(current_windows[1])text = chrome.find_element_by_xpath('/html/body/div[7]/div[2]/ul/li/div[2]/h2/a')print(text)

4.高级 - 滚动条的使用

在访问页面时,有些网页中的内容并不是一次性全都加载出来的,而是需要拖动滚动条,才能慢慢加载出来,比如京东这样的网站。

这时我们就可以用selenium去执行js代码,实现拉取滚动条完成加载页面。

滚动条回到顶部js="var q=document.getElementById('id‘).scrollTop=0"driver.execute_script(js)滚动条拉到底部js="var q=document.getElementById('id’).scrollTop=10000"---------以上方法用于firefox和ie----------chrome: js="var q=document.body.scrollTop=0"横向滚动条:js="windows.scrollTo(100,400)"

参考代码示例:

from selenium import webdriverfrom lxml import etreefrom time import sleepurl='?keyword=mac%E7%94%B5%E8%84%91&enc=utf-8&spm=2.1.1'chrome = webdriver.Chrome()# 发送请求chrome.get(url)# 将滚动条下拉到最底部js = "document.documentElement.scrollTop=10000"chrome.execute_script(js)# 加载页面sleep(3)# 获取网页源代码html = chrome.page_source# 将html代码解析成html对象e = etree.HTML(html)# 获取商品名称,价格names = e.xpath('//div[@class="p-name p-name-type-2"]/a/em')prices = e.xpath('//div[@class="p-price"]/strong/i/text()')print('共{}条结果'.format(len(names)))for n, price in zip(names, prices):    name = n.xpath('string(.)').replace('\n', '')    print("商品名称:{},价格:{}".format(name, price))

5.高级 - 无头浏览器

当我们在使用selenium时,每访问一次页面就弹出一个浏览器窗口。然而在做爬虫时,通常是不需要打开浏览器的,我们只需要使用浏览器的内核,因此我们可以使用chrome的无头模式。

只需要在创建实例时加入以下几行代码,就可以让浏览器进入无头模式

options = webdriver.ChromeOptions()options.add_argument('--headless')chrome = webdriver.Chrome(options=options)

6.高级-页面等待

分类:

1. 强制等待

不管页面有没有加载完成,都等待指定时间

缺点:设置时间太短,页面没有加载完成,设置时间太长,则浪费时间

time.sleep(10)

2. 隐式等待

隐式等待主要针对的是元素定位,隐式等待设置了一个时间,在这段时间内判断元素是否定位成功,若定位成功,进行下一步;若没成功,则会报超时加载

隐式等待只需定义一次,后续所有元素定位操作都会遵守

chrome.implicitly_wait(10)  # 设置隐式等待时间为10秒,后续所有元素定位操作均可用

标签: #selenium定位div下拉框 #python工具类common #python 获取窗口句柄 模拟 点击按钮 #python为什么弹不出浏览器 #selenium获取句柄