网页视频抓取脚本(1.为什么需要JS前面3篇文章讲了一些基本操作的方法)

优采云 发布时间: 2021-12-13 20:29

  网页视频抓取脚本(1.为什么需要JS前面3篇文章讲了一些基本操作的方法)

  1. 为什么我们需要JS

  前面3篇文章讲了Selenium的一些基本操作。使用这部分技巧,可以顺利完成网站的大部分自动化。

  但是,有一些网站 web操作使用WebDriver API无法完成,有些功能即使使用WebDriver API实现也不兼容。经常需要维护这组脚本,比如浏览器的位置。滑动、元素点击失效、日期选择等。

  这时候使用JavaScript直接操作网页内部元素,可以帮助我们完成Selenium自动化测试无法覆盖的功能。

  2. 使用方法

  Selenium 提供了以下方法:

  driver.execute_script(js_code)

  其中,js_code是一个JS脚本。常见的JS脚本包括:设置元素属性、移除属性、设置元素值、设置窗口位置等。

  使用 Selenium CSS Selector 类型,使用 JS 查找元素的方式包括以下 6 种类型:

  # 1、通过元素id属性,获取元素

document.getElementById('id');

# 2、通过元素name属性,获取元素

document.getElementsByName('name');

# 3、通过标签名,获取元素列表

# 获取的是一个列表

document.getElementsByTagName('tag_name');

# 4、通过类名,获取元素列表

document.getElementsByClassName("class_name");

# 5、通过选择器,获取一个元素

document.querySelector("css selector")

# 6、通过CSS选择器,获取元素列表

document.querySelectorAll("css selector")

  获取元素后,可以操作元素属性,例如:

  # 操作属性值

# 设置元素某一个元素值

element.setAttribute('属性名','属性值')

# 设置元素值

element.value="element_value";

# 删除属性

element.removeAttribute('属性名')

  结合以上3个操作,就可以通过JS改变一个网页元素的值了。

  # 待执行的js语句

exec_js = 'document.getElementById(element_id).value="element_value";'

# 执行js语句改变元素的值

driver.execute_script(exec_js)

  3. 常用操作

  以12306网站为例,选择出发日期。

  

  先用普通模式写一波自动化,用WebDriver查找元素,然后直接给元素设置一个日期值。

  运行后直接报错,运行日志会提示目标元素有不可编辑的属性-只读

  

  这时候就可以通过JS的方法方便的去掉这个属性,然后再添加元素的属性操作,就可以正常设置日期了。

  改写后的代码如下:

  from time import sleep

from selenium import webdriver

driver = webdriver.Chrome()

driver.get('https://www.12306.cn/index/')

# 去除掉元素的属性

exec_js = 'document.getElementById("train_date").removeAttribute("readonly");'

driver.execute_script(exec_js)

# 输入日期

element_train_date = driver.find_element_by_id("train_date")

element_train_date.clear()

element_train_date.send_keys("2012-12-12")

sleep(5)

driver.quit()

  当然,除了去除元素属性之外,还可以使用JS搜索元素语法来获取目标元素,然后直接在元素上设置一个日期,也可以满足我们的需求。

  # 找到元素,直接设置一个容器

exec_js = 'document.getElementById("train_date").value="2012-12-12";'

# 执行js代码

driver.execute_script(exec_js)

  4. 其他

  Selenium 自动化的很多操作都可以转成JS 语句,然后使用execute_script() 来完成同样的功能。

  但是在自动化的实际使用中,JS只是作为一个补充,帮助我们完成一些WebDriver无法实现的功能。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线