使用selenium_python 的坑
上一篇 / 下一篇 2016-09-14 00:08:20 / 个人分类:selenium
#-*- coding: UTF-8 -*-
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from time import sleep
import time
import unittest,re
class PythonWebdrResource(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.maximize_window()
self.driver.implicitly_wait(30)
self.base_url = ""
def test_python_webdr_resource(self, number=4):
driver = self.driver
driver.get(self.base_url)
# driver.find_element_by_css_selector("#main").send_keys(Keys.CONTROL, Keys.SUBTRACT)
# driver.find_element_by_css_selector("#main").send_keys(Keys.CONTROL, '\ue027')
driver.find_element_by_id("wkun").clear()
driver.find_element_by_id("wkun").send_keys("E1555A13112")
driver.find_element_by_id("wkpw").clear()
driver.find_element_by_id("wkpw").send_keys("")
driver.find_element_by_id("dl").click()
# sleep(2)
if number == None:
pass
else:
print "number is not null"
driver.execute_script("document.body.style.zoom='25%'")
cssstr = "div.proOne:nth-child(%d) > div:nth-child(1) > div:nth-child(2) > a:nth-child(1)" % (number+1)
print cssstr
driver.find_element_by_css_selector(cssstr).click()
driver.find_element_by_link_text(u"开始学习").click()
if driver.find_element_by_class_name("ui_state_highlight").is_displayed():#是否继续
driver.find_element_by_class_name("ui_state_highlight").click()
else:
driver.find_element_by_id("treeDemo_1_span").click()
driver.find_element_by_link_text(u"观看").click()
sleep(2)
driver.find_element_by_link_text(u"返回").click()
self.findCourse()
# driver.find_element_by_css_selector("button.vjs-big-play-button").click()
sleep(5)
# driver.find_element_by_css_selector("#video_div_video > div.vjs-big-play-button").click()
while True:
#获取时间戳的百分比
value = driver.find_element_by_css_selector("#video_div_video > div.vjs-control-bar > div.vjs-progress-control.vjs-control > div").get_attribute("aria-valuenow")
print value
value = float(value.encode())
print type(value)
sleep(2)
if value > 99:
print 'value = 100'
sleep(2)
try:
m = 0
while driver.find_element_by_link_text(u"返回").is_displayed():
driver.find_element_by_link_text(u"返回").click()
m = m + 1
sleep(5)
print "click fanhui button ",m
except:
print 'press fanhui button success'
pass
self.findCourse()
else:
print "sleep 1300"
print time.ctime()
sleep(1300)
try:
if driver.find_element_by_class_name("ui_state_highlight").is_displayed():#确定按钮
driver.find_element_by_class_name("ui_state_highlight").click()
except:
print 'highlight button not exists'
pass
def findCourse(self):
number = 4
driver = self.driver
#点击第一章
driver.find_element_by_css_selector("#treeDemo > li:nth-child(1)").click()
sleep(1)
#获取章节的目录个数
num = driver.find_elements_by_css_selector("#treeDemo>li")
for index in range(len(num)):
print "index:%s" % index
if index > 7: #大于8,滑块向下划
start = driver.find_element_by_css_selector(".r_scrollBar")
end = driver.find_element_by_css_selector(".r_bottom")
ActionChains(driver).drag_and_drop(start, end).perform()
chapter = "#treeDemo > li:nth-child(%d)" % (index+1)
print chapter
sleep(1)
driver.find_element_by_css_selector(chapter).click()
sleep(1)
if number <= 2:
text1 = driver.find_element_by_css_selector("#wall-act- > div > table > tbody > tr > td:nth-child(2) > span").text
text2 = driver.find_element_by_css_selector("#wall-act- > div > table > tbody > tr > td:nth-child(3) > span").text
else:
text1 = driver.find_element_by_css_selector("#parallels-act-list > div > table > tbody > tr > td:nth-child(2) > span").text
text2 = driver.find_element_by_css_selector("#parallels-act-list > div > table > tbody > tr > td:nth-child(3) > span").text
text1 = int(text1.split(u"分")[0].strip())
text2 = int(text2.split(u"分")[0].strip())
print text1
print text2
if text1+5 < text2:
driver.find_element_by_link_text(u"观看").click()
try:
n = 1
while driver.find_element_by_css_selector("div.vjs-big-play-button").is_displayed():
driver.find_element_by_css_selector("div.vjs-big-play-button").click()
sleep(5)
n += 1
print "click ", n
if n == 5:
n = 1
driver.find_element_by_link_text(u"返回").click()
sleep(1)
driver.find_element_by_link_text(u"观看").click()
except:
print 'click start button success'
return
def tearDown(self):
self.driver.quit()
if __name__ == "__main__":
unittest.main()
多次修改,最终的代码如上所示
因为用appium和uiautomator使用也比较熟练,也因为之前学过selenium但是忘得差不多了,所以我想偷个懒,直接用selenium ide直接录制后,导出脚本直接修改修改就好了。
谁知道,selenium ide和原本的firefox不匹配。找到ide不能使用的原因,足足花了两三个小时。心累。
使用了旧版本的firefox,最后启动的时候,默认的firefox就是起不来。
最后不得不使用chrome启动。就是chromedirver要放在环境变量中。
之后就是看课程过程中的一些坑。
1.进入视频界面,点击开始图标就是不行,而且,用is_displayed()函数来判断是否存在,判断是存在的,点击了,就是不开始,后来在脚本启动后,脚本点击没有成功,我用鼠标点,也没有点成功。趁着sleep的时间,退出再进就成功了。其中用到了,捕捉异常,点击五次不成功,点击退出再进。
2.在uiautomator中,有一个wait.exists(timeout=)的函数,我知道selenium中也一定有这样的函数,就是不知道具体是什么,最后用了按了个点,一个一个查看来选出来的。找到了is_displayed()只可惜他和appium中的一样,如果element不存在,脚本就会报错。所以只能用异常来处理。
3.在一个利用到滑块的地方,要使用ActionChains函数。
也是selenium的一个自带from selenium.webdriver.common.action_chains import ActionChains
4.第三门课程开始,不在页面中了,需要滑动滑块。之后想到的解决方法就是页面缩放,真的是,使用组合键,使用了好多方法都没有成功,最终还是用了js来执行页面缩放,只是这样的话,就只是在当前页面会缩放,下面一个页面就不会缩放了。
5.第三第四门课程和前面两门课程,进入后的界面不一样,所以,又开始调整脚本,添加了一个参数,一是选第三个就要缩放界面,第二个就是因为后面两个课程的界面不一样,而重新添加了脚本。
6由参数引申出来的就是,我写了一个函数,findcourse,但是里面也要用到主函数中的number这个参数,如果我在findcouse中再定义一个,我就要每次改两个地方(最终我还是用了这个方法,没有找到好方法),让number成为global也不行。
7.本来想不用函数直接运行,以前遇到了一个情况也相同,只有一个入口,但是这个入口不能多次开启,开启一次,别的地方无法调用。
TAG:
标题搜索
日历
|
|||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
1 | 2 | 3 | 4 | 5 | 6 | ||||
7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
28 | 29 | 30 |
我的存档
数据统计
- 访问量: 142813
- 日志数: 46
- 建立时间: 2015-06-05
- 更新时间: 2020-06-19