随笔记录方便自己和同路人查阅。

#------------------------------------------------我是可耻的分割线-------------------------------------------

  学习selenium自动化之前,最好先学习HTML、CSS、JavaScript等知识,有助于理解定位及操作元素的原理。关于python和selenium安装请自行搜索别的资料,

这里就不多做介绍了,所有例子均使用python3.6+selenium执行的。

#------------------------------------------------我是可耻的分割线-------------------------------------------

  虽然WebDriver提供了操作浏览器的前进和后退方法,但对于浏览器滚动条并没有提供相应的操作方法。在这种情况下,就可以借助JavaScript来控制浏览器的滚动条。WebDriver提供了execute_script()方法来执行JavaScript代码。

  一般我们想到的必须使用滚动条的场景是:注册时的法律条文的阅读。判断用户是否阅读完的标准是:滚动条是否拉倒页面底部。当然,有时候为了使操作更接近用户行为也会使用滚动条,例如用户要操作的元素在页面的第二屏,一般用户不会对看不到的二元素进行操作,name就需要先将滚动条拖动到页面的第二屏再进行操作。

  用于调整浏览器滚动条位置的JavaScript代码如下:

......
<!--Windows.scrollTo(左边距,左边距);-->
    window.scrollTo(0,450);
......

  window.scrollTo()方法用于设置浏览器窗口滚动条的水平和垂直位置。方法的第一个参数表示水平的左间距,第二个参数表示垂直的上边距。其代码如下:

from selenium import webdriver
from time import sleep

#访问百度
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.implicitly_wait(10)
#设置浏览器窗口大小
driver.set_window_size(600,600)

#搜索
driver.find_element_by_id('kw').send_keys('selenium')
driver.find_element_by_id('su').click()
sleep(2)

#通过JavaScript设置浏览器窗口的滚动条
js = "window.scrollTo(100,500);"
driver.execute_script(js)
sleep(3)

  通过浏览器打开百度进度搜索,并且提前通过set_window_size()方法将浏览器窗口设置为固定宽高显示,目的是让窗口出现水平和垂直滚动条。然后通过execute_script()方法执行JavaScript代码来移动滚动条,如下图:

  当然,JavaScript的作用不仅仅体现在浏览器滚动条的操作上,还可以用它向页面中textarea文本框输入内容,如下图:

文本框前端代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <textarea class="textarea" style="width:100px;height:100px">
    </textarea>
</body>
</html>

  

  虽然我们可以通过class的方式将其进行定位,但却不能通过send_keys()向文本框中输入文本信息。这种情况下,就需要借助JavaScript代码完成输入。

text="inout text"
js = "var sum=document.getElementById('id');sum.value='" + text +'';"
driver.execute_script(js);

   首页定义了要输入的内容text,然后将textJavaScript代码通过“+”进行拼接。这样做的目的是为了使输入内容变得可自定义。最后,通过execute_script()执行JavaScript代码。

 

text="inout text"
js = "var sum=document.getElementById('id');sum.value='" + text +'';"
driver.execute_script(js);

01-31 23:55