python在工作中使用案例:selenium实现网页自动化操作

前言

公司最近一个项目一直在重复一个网页操作,想起了selenium库。
之前用来模拟浏览器执行网页爬取,来跳过反扒处理。是通过完全模拟浏览器进行渲染,也就是服务器会完全认为是用户在用浏览器进行操作,这样的话也就可以进行公司的项目,自动化处理网页的操作

又称为动态渲染⻚⾯爬取

  • 对于访问Web时直接响应的数据(就是response内容可⻅),我们使⽤urllib、requests或Scrapy
    框架爬取。
  • 对应⼀般的JavaScript动态渲染的⻚⾯信息(Ajax加载),我们可以通过分析Ajax请求来抓取信
    息。
  • 即使通过Ajax获取数据,但还有会部分加密参数,后期经过JavaScript计算⽣成内容,导致我们难
    以直接找到规律,如淘宝⻚⾯。
  • 为了解决这些问题,我们可以直接使⽤模拟浏览器运⾏的⽅式来实现信息获取。
  • 在Python中有许多模拟浏览器运⾏库,如:Selenium、Splash、PyV8、Ghost等

Selenium的介绍

  • Selenium是⼀个⾃动化测试⼯具,利⽤它可以驱动浏览器执⾏特定的动作,如点击,下拉,等操
    作。
  • Selenium可以获取浏览器当前呈现的⻚⾯源代码,做到可⻅既可爬,对应JavaScript动态渲染的信息爬取⾮常有效。
    官⽅⽹址:http://www.seleniumhq.org
    官⽅⽂档:http://selenium-python.readthedocs.io
    中⽂⽂档:http://selenium-python-zh.readthedocs.io
    安装: pip install selenium
  • Selenium⽀持⾮常多的浏览器,如Chrome、Firefox、Edge等,还⽀持⽆界⾯浏览器
    PhantomJS。
  • ChromeDriver浏览器驱动的安装:(注意浏览器版本:)
    ⾸先查看当前⾕歌Chrome浏览器的版本V61V67(对应2.352.38),再到下⾯⽹址下载
    ⽹址: https://chromedriver.storage.googleapis.com/index.html
    Windows安装:将解压的⽂件: chromedriver.exe 放置到Python的Scripts⽬录下。
    Mac/Linux安装:将解压的⽂件: chromedriver 放置到 /usr/local/bin/ ⽬录下

chromedriver.exe 放置到到指定目录下后webdriver.Chrome()
不放到指定目录也可以这样做:webdriver.Chrome(‘ chromedriver.exe的所在目录‘)

  • PhantomJS驱动的下载地址:http://phantomjs.org/download.html

Selenium的使⽤

  1. 初次体验:模拟⾕歌浏览器访问百度⾸⻚,并输⼊python关键字搜索
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
#初始化⼀个浏览器(如:⾕歌,使⽤Chrome需安装chromedriver)
driver = webdriver.Chrome()
#driver = webdriver.PhantomJS() #⽆界⾯浏览器
try:#请求⽹⻚
driver.get("https://www.baidu.com") #查找id值为kw的节点对象(搜索输⼊框)
input = driver.find_element_by_id("kw") #模拟键盘输⼊字串内容
input.send_keys("python") #模拟键盘点击回⻋键
input.send_keys(Keys.ENTER) #显式等待,最⻓10秒
wait = WebDriverWait(driver,10) #等待条件:10秒内必须有个id属性值为content_left的节点加载出来,否则抛异常。
wait.until(EC.presence_of_element_located((By.ID,'content_left')))
# 输出响应信息
print(driver.current_url)
print(driver.get_cookies())
print(driver.page_source)
finally: #关闭浏览器
#driver.close()
pass
  1. 声明浏览器对象
from selenium import webdriver
driver = webdriver.Chrome() #⾕歌 需:ChromeDriver驱动
driver = webdriver.FireFox() #⽕狐 需:GeckoDriver驱动
driver = webdriver.Edge() 
driver = webdriver.Safari() 
driver = webdriver.PhantomJS() #⽆界⾯浏览器
  1. 声明浏览器对象
from selenium import webdriver
driver = webdriver.Chrome()
#driver = webdriver.PhantomJS()
driver.get("http://www.taobao.com")
print(driver.page_source)
#driver.close()
  1. 查找节点:
  • 获取单个节点的⽅法:
    find_element_by_id()
    find_element_by_name()
    find_element_by_xpath()
    find_element_by_link_text()
    find_element_by_partial_link_text()
    find_element_by_tag_name()
    find_element_by_class_name()
    find_element_by_css_seletor()
from selenium import webdriver
from selenium.webdriver.common.by import By
#创建浏览器对象
driver = webdriver.Chrome()
#driver = webdriver.PhantomJS()
driver.get("http://www.taobao.com") #下⾯都是获取id属性值为q的节点对象
input = driver.find_element_by_id("q")
print(input)
input = driver.find_element_by_css_selector("#q")
print(input)
input = driver.find_element_by_xpath("//*[@id='q']")
print(input) #效果同上
input = driver.find_element(By.ID,"q")
print(input)
#driver.close()
  • 获取多个节点的⽅法:
    find_elements_by_id()
    find_elements_by_name()
    find_elements_by_xpath()
    find_elements_by_link_text()
    find_elements_by_partial_link_text()
    find_elements_by_tag_name()
    find_elements_by_class_name()
    find_elements_by_css_seletor()
  1. 节点交互:
from selenium import webdriver
import time
#创建浏览器对象
driver = webdriver.Chrome()
#driver = webdriver.PhantomJS()
driver.get("http://www.baidu.com") #下⾯都是获取id属性值为q的节点对象
input = driver.find_element_by_id("kw") #模拟键盘输⼊iphone
input.send_keys('iphone')
time.sleep(3) #清空输⼊框
input.clear()
#模拟键盘输⼊iPad
input.send_keys('iPad') #获取搜索按钮节点
botton = driver.find_element_by_class_name("btn-search") #触发点击动作
botton.click()
#driver.close()

尾声1

这些为最基础的操作,可以举一反三,觉得好玩或者什么新奇的操作可以评论交流
会继续更新更深入操作

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Selenium接口自动化是指使用Selenium工具进行web界面的自动化测试。下面是一个Selenium接口自动化案例的例子: 假设我们要测试一个电商网站的用户注册功能。 首先,我们需要编写一个测试用例。假定我们要测试的用户注册功能包括输入用户名、密码和邮箱,然后点击注册按钮。 接下来,我们使用Selenium的接口自动化功能进行编码。首先,我们需要启动浏览器,并打开电商网站的注册页面。然后,我们需要通过Selenium的接口方法找到相应的输入框和按钮,并通过send_keys()方法输入我们所定义的测试数据。最后,我们通过click()方法点击注册按钮。 在编写完上述代码后,我们可以运行测试用例,并观察结果。如果用例运行成功,即成功完成了用户注册流程,我们可以得出结论,该用户注册功能正常工作。如果测试用例执行失败,即用户注册流程出现问题,我们可以通过查看错误信息来定位问题所在,然后进行修复。 通过使用Selenium接口自动化,我们可以在短时间内完成大量的自动化测试,并且可以重复运行这些测试用例,提高测试效率和准确性。同时,我们还可以轻松地修改测试用例的数据,以覆盖不同的测试场景,确保系统在不同情况下的稳定性和正确性。 总结而言,Selenium接口自动化可以帮助我们快速、准确地测试web界面的各种功能,并提高测试效率。它是一种非常有用的工具,可以应用于各种不同的项目和场景。 ### 回答2: Selenium接口自动化是一种通过使用Selenium的接口来自动化测试web应用程序的方法。下面是一个针对购物网站的Selenium接口自动化案例: 在测试过程,我们需要确保用户能够成功登录和浏览所有商品。首先,我们需要启动浏览器并打开购物网站的首页。 接下来,我们需要定位并填写登录表单的用户名和密码,并点击登录按钮。为了实现这一步骤,我们可以使用Selenium提供的find_element_by_id()方法来定位并填写用户名和密码,然后使用click()方法来点击登录按钮。 一旦登录成功,我们可以使用find_element_by_xpath()方法来定位商品列表,并使用get_attribute()方法来获取每个商品的详细信息。 为了确保每个商品都能正确显示在列表,我们可以使用assert断言来验证它们的存在和正确性。 最后,我们可以使用Selenium提供的截图功能将测试结果保存为一张图片,以便之后的参考。 通过这个案例,我们可以使用Selenium接口自动化测试来验证购物网站的登录和商品显示功能。除了上述案例Selenium接口自动化还可以用于其他类型的测试,如表单填写、按钮点击、链接跳转等。 ### 回答3: Selenium是一个用于Web应用程序自动化测试的开源工具,可以模拟用户在浏览器的行为,如点击、填写表单等操作。下面是一个Selenium接口自动化案例的简要示例: 假设我们要编写一个测试用例,验证一个网页上的注册功能是否正常工作。测试用例的步骤如下: 1. 打开浏览器:使用Selenium的WebDriver类创建一个浏览器实例。 2. 导航到注册页面:使用浏览器实例调用get方法,在浏览器打开注册页面。 3. 填写表单:使用Selenium的WebElement类的sendKeys方法,向表单的各个输入框输入测试数据。 4. 提交表单:使用WebElement类的submit方法,提交表单。 5. 验证结果:使用Selenium的ExpectedConditions类,等待页面加载完成,并使用断言语句验证是否成功注册。 具体的代码示例如下: ```python 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 # 打开浏览器 browser = webdriver.Chrome() # 导航到注册页面 browser.get('http://example.com/register') # 填写表单 username_input = browser.find_element(By.CSS_SELECTOR, 'input[name="username"]') username_input.send_keys('testuser') password_input = browser.find_element(By.CSS_SELECTOR, 'input[name="password"]') password_input.send_keys('testpassword') # 提交表单 submit_button = browser.find_element(By.CSS_SELECTOR, 'button[type="submit"]') submit_button.submit() # 等待页面加载完成 wait = WebDriverWait(browser, 10) success_message = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '.success-message'))) # 验证结果 assert success_message.text == '注册成功' # 关闭浏览器 browser.quit() ``` 这个测试案例使用Selenium的WebDriver类来控制浏览器进行自动化操作使用了By类来定位页面元素,使用了WebDriverWait类等待页面加载完成,并使用了ExpectedConditions类判断页面元素是否可见。测试案例的结果会通过断言语句进行验证。 以上是一个简单的Selenium接口自动化案例,通过编写和运行类似的测试用例,我们可以有效地自动化测试Web应用程序的各项功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值