安装 selenium 第三方库
<span class="hljs-attribute">pip install selenium</span>
下载浏览器驱动:
- Firefox浏览器驱动: geckodriver
- Chrome浏览器驱动: chromedriver , taobao备用地址
- IE浏览器驱动: IEDriverServer
- Edge浏览器驱动: MicrosoftWebDriver
- Opera浏览器驱动: operadriver
- PhantomJS浏览器驱动: phantomjs
需要把这些浏览器驱动放入 Python 应用目录里面的 Script 文件夹里面
① 200 多本 Python 电子书(和经典的书籍)应该有
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且可靠的练手项目及源码)
④ Python基础入门、爬虫、网络开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
每次当selenium启动chrome浏览器的时候,chrome浏览器很干净,没有插件、没有收藏、没有历史记录,这是因为selenium在启动chrome时为了保证最快的运行效率,启动了一个裸浏览器,这就是为什么需要配置参数的原因,但是有些时候我们需要的不仅是一个裸浏览器
selenium启动配置参数接收是ChromeOptions类,创建方式如下 :
<span class="hljs-attr">from <span class="hljs-string">selenium import webdriver
<span class="hljs-attr">option = <span class="hljs-string">webdriver.ChromeOptions()
<span class="hljs-attr">driver = <span class="hljs-string">webdriver.Chrome(chrome_options=option)</span></span></span></span></span></span>
创建了ChromeOptions类之后就是添加参数,添加参数有几个特定的方法,分别对应添加不同类型的配置项目
<span class="hljs-keyword">from selenium <span class="hljs-keyword">import webdriver
option = webdriver.ChromeOptions()
</span></span>
常用配置参数:
<span class="hljs-keyword">from selenium <span class="hljs-keyword">import webdriver
option = webdriver.ChromeOptions()
</span></span>
其他配置项目参数
–user-data-dir=”[PATH]”
制作无头浏览器
规避检测
门户网站检测如果是selenium请求的,有可能会拒绝访问。这也是一种反爬机制
实现规避检测
<span class="hljs-keyword">from selenium <span class="hljs-keyword">import webdriver
<span class="hljs-keyword">from selenium.webdriver <span class="hljs-keyword">import ChromeOptions
options = ChromeOptions()
options.add_experimental_option(<span class="hljs-string">'excludeSwitcher', [<span class="hljs-string">'enable-automation'])
driver = webdriver.Chrome(options=options)</span></span></span></span></span></span>
注意:这里只能使用 options 添加
如果有其他的模块要添加,注意要分开添加
from selenium import webdriver
driver = webdriver.Firefox()
元素定位语法
常用语法:
<span class="hljs-selector-tag">find_element_by_id()
<span class="hljs-selector-tag">find_element_by_name()
<span class="hljs-selector-tag">find_element_by_class_name()
<span class="hljs-selector-tag">find_element_by_tag_name()
<span class="hljs-selector-tag">find_element_by_link_text()
<span class="hljs-selector-tag">find_element_by_partial_link_text()
<span class="hljs-selector-tag">find_element_by_xpath()
<span class="hljs-selector-tag">find_element_by_css_selector()</span></span></span></span></span></span></span></span>
在 element 变成 elements 时,返回符合条件的所有元素组成的数组
控制浏览器大小
- driver.set_window_size(480, 800)
浏览器后退,前进
<span class="hljs-selector-tag">driver<span class="hljs-selector-class">.forward()
<span class="hljs-selector-tag">driver<span class="hljs-selector-class">.back()
</span></span></span></span>
- driver.refresh()
<span class="hljs-selector-tag">driver<span class="hljs-selector-class">.find_element_by_id(<span class="hljs-string">"kw")<span class="hljs-selector-class">.clear() # 清空文本
<span class="hljs-selector-tag">driver<span class="hljs-selector-class">.find_element_by_id(<span class="hljs-string">"kw")<span class="hljs-selector-class">.send_keys(<span class="hljs-string">"selenium") # 模拟按键输入
<span class="hljs-selector-tag">driver<span class="hljs-selector-class">.find_element_by_id(<span class="hljs-string">"su")<span class="hljs-selector-class">.click() # 单击元素</span></span></span></span></span></span></span></span></span></span></span></span></span>
在搜索框模拟回车操作
<span class="hljs-attr">search_text = driver.find_element_by_id(<span class="hljs-string">'kw') search_text.send_keys(<span class="hljs-string">'selenium') search_text.submit() </span></span></span>
drive.size
在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供
ActionChains 类提供了鼠标操作的常用方法:
<span class="hljs-selector-tag">click(on_element=None) ——单击鼠标左键
<span class="hljs-selector-tag">click_and_hold(on_element=None) ——点击鼠标左键,不松开
<span class="hljs-selector-tag">context_click(on_element=None) ——点击鼠标右键
<span class="hljs-selector-tag">double_click(on_element=None) ——双击鼠标左键
<span class="hljs-selector-tag">drag_and_drop(source, target) ——拖拽到某个元素然后松开
<span class="hljs-selector-tag">drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开
<span class="hljs-selector-tag">key_down(value, element=None) ——按下某个键盘上的键
<span class="hljs-selector-tag">key_up(value, element=None) ——松开某个键
<span class="hljs-selector-tag">move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标
<span class="hljs-selector-tag">move_to_element(to_element) ——鼠标移动到某个元素
<span class="hljs-selector-tag">move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置
<span class="hljs-selector-tag">perform() ——执行链中的所有动作
<span class="hljs-selector-tag">release(on_element=None) ——在某个元素位置松开鼠标左键
<span class="hljs-selector-tag">send_keys(*keys_to_send) ——发送某个键到当前焦点的元素
<span class="hljs-selector-tag">send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
语法:
from selenium.webdriver.common.action_chains import ActionChains
想使用selenium中的键盘事件,首先我们必须导入Keys包,需要注意的是包名称Keys首字母需要大写。Keys类中提供了几乎所有的键盘事件包括组合按键如 Ctrl+A、 Ctrl+C 等
使用语法:
<span class="hljs-attribute">from selenium.webdriver.common.keys import Keys
element.send_keys(键盘事件)
</span>
其他事件可以通过查看源码获取
<span class="hljs-attr">title = driver.title </span>
显式等待使WebdDriver等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常
实例:
<span class="hljs-keyword">from selenium <span class="hljs-keyword">import webdriver
<span class="hljs-keyword">from selenium.webdriver.common.<span class="hljs-keyword">by <span class="hljs-keyword">import By
<span class="hljs-keyword">from selenium.webdriver.support.ui <span class="hljs-keyword">import WebDriverWait
<span class="hljs-keyword">from selenium.webdriver.support <span class="hljs-keyword">import expected_conditions
driver = webdriver.Firefox()
driver.get(<span class="hljs-string">"http://www.baidu.com")
element = WebDriverWait(driver, <span class="hljs-number">5, <span class="hljs-number">0.5).<span class="hljs-keyword">until(
expected_conditions.presence_of_element_located((By.ID, <span class="hljs-string">"kw"))
) </span></span></span></span></span></span></span></span></span></span></span></span></span></span>
WebDriverWait类是由WebDirver 提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常
语法:
<span class="hljs-selector-tag">WebDriverWait(driver, timeout, poll_frequency=<span class="hljs-number">0.5, ignored_exceptions=None)</span></span>
参数:
- driver :浏览器驱动
- timeout :最长超时时间,默认以秒为单位
- poll_frequency :检测的间隔(步长)时间,默认为0.5S
- ignored_exceptions :超时后的异常信息,默认情况下抛NoSuchElementException异常
- WebDriverWait()一般由until()或until_not()方法配合使用until(method, message=”) :调用该方法提供的驱动程序作为一个参数,直到返回值为Trueuntil_not(method, message=”): 调用该方法提供的驱动程序作为一个参数,直到返回值为False
如果某些元素不是立即可用的,隐式等待是告诉WebDriver去等待一定的时间后去查找元素。 默认等待时间是0秒,一旦设置该值,隐式等待是设置该WebDriver的实例的生命周期
<span class="hljs-keyword">from selenium <span class="hljs-keyword">import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(<span class="hljs-number">10) </span></span></span>
driver.switch_to_window(<span class="hljs-string">"windowName") </span>
语法:
<span class="hljs-attr">alert = driver.switch_to_alert()</span>
alert 里面的方法
- text:返回 alert/confirm/prompt 中的文字信息
- accept():接受现有警告框
- dismiss():解散现有警告框
- send_keys(keysToSend):发送文本至警告框。keysToSend:将文本发送至警告框
<span class="hljs-keyword">from selenium <span class="hljs-keyword">import webdriver
<span class="hljs-keyword">from selenium.webdriver.support.select <span class="hljs-keyword">import Select
driver = webdriver.Chrome()
driver.implicitly_wait(<span class="hljs-number">10) </span></span></span></span></span>
<span class="hljs-string">"""
deselect_all() 取消全选
deselect_by_value(value) 通过value属性取消选择
deselect_by_index(index) 通过index取消选择
deselect_by_visible_text(text) 通过text取消选择
"""
</span>
<span class="hljs-selector-tag">driver<span class="hljs-selector-class">.find_element_by_name(<span class="hljs-string">"file")<span class="hljs-selector-class">.send_keys(<span class="hljs-string">'D:\\upload_file.txt') # 定位上传按钮,添加本地文件</span></span></span></span></span>
WebDriver操作cookie的方法:
<span class="hljs-selector-tag">get_cookies()
<span class="hljs-selector-tag">get_cookie(name)
<span class="hljs-selector-tag">add_cookie(cookie_dict)
<span class="hljs-selector-tag">delete_cookie(name,optionsString)
<span class="hljs-selector-tag">delete_all_cookies()
</span></span></span></span></span>
参考链接:
https://www.jianshu.com/p/773c58406bdb
<span class="hljs-selector-tag">for <span class="hljs-selector-tag">item <span class="hljs-selector-tag">in <span class="hljs-selector-tag">cookies:
<span class="hljs-selector-tag">driver<span class="hljs-selector-class">.add_cookie(<span class="hljs-selector-tag">item)</span></span></span></span></span></span></span>
与普通的在headers里添加 {‘Cookies’:’ ‘} 不一样的是,此方法需要按照cookie的name,value,path,domain格式逐个cookie添加
js=<span class="hljs-string">"window.scrollTo(100,450);"
driver.execute_script(js) </span>
通过execute_script()方法执行JavaScripts代码来移动滚动条的位置
driver.get_screenshot_as_file(<span class="hljs-string">"D:\\baidu_img.jpg") </span>
<span class="hljs-selector-tag">driver<span class="hljs-selector-class">.close()
<span class="hljs-selector-tag">driver<span class="hljs-selector-class">.quit() </span></span></span></span>
Original: https://www.cnblogs.com/sn5200/p/15949796.html
Author: Python可乐的呀
Title: 关于Python的Selenium框架全解,一篇完整的说明书
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/814827/
转载文章受原作者版权保护。转载请注明原作者出处!