一、自动化测试工具,支持多种浏览器,解决JS渲染问题

二、安装

pip3 install Selenium

三、操作介绍(因为是学习别人的课程为了尊重知识产权,部分代码就不显示了)

1驱动浏览器

browser = webdriver.Chrome()

try:   
 browser.get('www.sina.com')#上网

2查找元素

一种方法:

browser.find_element_by_name()
browser.find_element_by_class_name()
browser.find_element_by_id()
browser.find_element_by_xpath()
browser.find_element_by_tag_name()

等等

第二种方法:

browser.find_element(By.NAME,'search')

这里面的find_element相当于BS4里面的find,如果想要用find_all,就要用find_elements

同上有两种方法,我这里就写一种了

browser.find_elements(By.NAME,'search')

3交互操作

input = browser.find_element_by_class_name('search-combobox-input')
input.send_keys('机械键盘')
time.sleep(3)
input.clear()
input.send_keys('iPad')
time.sleep(3)
button = browser.find_element_by_class_name('btn-search')
button.click()

更多操作详见官方文档:

http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.remote.webelement

执行动作链:

感觉这用的不多,详见官方文档

http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains

4获取属性 

显示属性

input = browser.find_element_by_class_name('search-combobox-input')

print(input.get_attribute('aria-combobox'))

这样返回的是aria-combobox 的属性‘list’

显示文本

browser = webdriver.Chrome()
try:
url = 'https://www.zhihu.com/explore'
browser.get(url)
answers = browser.find_elements_by_class_name('zh-summary')
for answer in answers:
print(answer.text)
finally:
browser.close()

这样就显示了知乎发现里面答案的文本

获取ID、位置、标签名、大小

browser = webdriver.Chrome()
try:
url = 'https://www.zhihu.com/explore'
browser.get(url)
answers = browser.find_elements_by_class_name('zh-summary')
for answer in answers:

print(answer.location)
print(answer.tag_name)
print(answer.size)

finally:
browser.close()

Frame

在某些用到框架的网页里面使用:

browser.switch_to.frame('name')
browser.switch_to.parent_frame('name')

5等待

有的时候网络需要等待Ajax请求加载,所以需要等待网页全部加载出来

隐式等待

当加载网页没有显示我们需要找的元素的时候,会隐式地等待一段时,如果找到元素就直接返回

browser = webdriver.Chrome()

browser.implicitly_wait(10)

url = 'https://www.zhihu.com/explore'
browser.get(url)

显式等待

显式等待是如果特定条件不满足则等待规定的时间

browser = webdriver.Chrome()
url = 'https://www.zhihu.com/explore'
browser.get(url)
wait = WebDriverWait(browser,10)
intput = wait.until(EC.presence_of_element_located((By.ID,'q')))
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'***')))

显式等待的条件见官方文档:http://selenium-python.readthedocs.io/api.html#selenium.webdriver.support.expected_conditions.element_located_selection_state_to_be

title_is标题是某内容
title_contains标题包含某内容
presence_of_all_elements_located y元素加载出,传入定位元组,如(By.ID,'p')
visibility_of 元素可见,传入定位元组

text_to_be_present_in_element 某个元素文本包含某个文字
text_to_be_present_in_element_value 某个元素值包含某文件
element_to_be_clickable 某元素可点击

等等

6浏览器前进和后退

browser.forward()
browser.back()

7Cookies

可以进行cookies的查看,添加和删除操作

url = 'https://www.zhihu.com/explore'
browser.get(url)
print(browser.get_cookies())
browser.add_cookie({'name':'dai','value':'123'})#一定要记得有value否则会报错
print(browser.get_cookies())
browser.delete_all_cookies()
print(browser.get_cookies())

8添加新的选项卡

browser.execute_script('window.open()')
browser.switch_to.window(browser.window_handles[1])
browser.get('https://www.sina.com')

9异常处理

异常处理很多,查看官方文档比较好

最新文章

  1. 微冷的雨Java基础学习手记(一)
  2. asp.net+mysq 数据库操作类
  3. 2015ACM/ICPC亚洲区长春站 B hdu 5528 Count a * b
  4. Java锁的种类
  5. ssh秘钥交换详解与实现 diffie-hellman-group-exchange-sha
  6. Oracle 索引扫描的4种类型
  7. Linux - 输入输出流程序 代码(C)
  8. C#中WebBrowser的使用
  9. Java 泛型 泛型方法
  10. python 接口自动化测试--代码实现(七)
  11. linux版powershell安装教程(.net core版)
  12. SQLite数据库_实现简单的增删改查
  13. 推荐一个基于Vue2.0的的一款移动端开发的UI框架,特别好用。。。
  14. Cause: net.sf.cglib.beans.BulkBeanException; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
  15. CountDownLatch 源码解析—— await()
  16. Win7 x64位打开VirtualBox报错处理。
  17. 在 Docker 里跑 Java,你必须知道的那些事儿!(转)
  18. stimulus(6300✨)
  19. istream不是std的成员
  20. SpringMVC中@RestController的用法

热门文章

  1. ConcurrentHashMap (jdk1.7)源码学习
  2. Spring高级特性之三:@Enable*注解的工作原理
  3. NSSCTF-error
  4. RFC2889MAC地址学习速率——网络测试仪实操
  5. 大数据BI系统搭建对企业经营的作用有哪些
  6. Qt:QWebChannel
  7. Java:各版本官方文档
  8. docker学习笔记(2)——docker常用命令
  9. hexo部署到github时,提示typeError [ERR_INVALID_ARG_TYPE] The “mode“ argument must be integer. Receive
  10. 2022年官网下安装RedisDesktopManager最全版与官网查阅方法