爬虫学习笔记----day2

主线参考来源:https://www.cnblogs.com/yoyoketang/tag/selenium/default.html?page=1
1.js处理内置div滚动条
#类比昨天的学习笔记:
js = “var q=document.body.scrollTop=0”#Chrome
driver.execute_script(js)
s=“var q=document.documentElement.scrollTop=0”#Firefox
driver.execute_script(js)
#纵向滚动
js1=‘document.getElementById.scrollTop=0’#到顶部
driver.execute_script(js1)
#横向则改为scrollLeft
#也可通过class name定位:
js3=‘document.getElementByClassName(‘scrolling’)[0].scrollTop=0’#获取的class返回的是List对象
2.查看selenium API
1.已知道函数名查看函数:python -m pydoc open(open:函数名,-m参数:python以脚本方法运行模块)
2.未知函数或方法:
1.python -m pydoc -p 6666(-p参数:这个表示在本机上启动服务;6666参数:这个是服务端口号,随意设置)
2.打开后,界面会出现一个地址:http://localhost:6666/,在浏览器直接打开(但经测试只能在IE浏览器打开,其余均被拦截)
3…在浏览器输入:http://localhost:6666/(Built-in Moudles :这个是python自带的模块)
4.点开selenium>webdriver>firefox>webdrive,最终路径http://localhost:6666/selenium.webdriver.chrome.webdriver.html,看到的即为selenium的webdriver API帮助文档
3.table定位
可用xpath定位。例:
t = driver.find_element_by_xpath(".//[@id=‘myTable’]/tbody/tr[2]/td[1]")
4.js处理多窗口
会自动弹出新窗口的链接都有共同属性:target="_blank"。因此可修改元素的target属性
js = ‘document.getElementsByClassName(“mnav”)[0].target="";’
driver.execute_script(js)
driver.find_element_by_link_text(“糯米”).click()
5.Selenium Grid2分布式执行测试脚本
原文链接:https://blog.csdn.net/real_tino/article/details/53467406(后续用到时再进行测试)
Selenium grid是用来分布式执行测试用例脚本的工具。使用grid所需要的文件:1.Selenium server(即selenium-server-standalone-x.xx.x.jar);2.grid配置文件(该文件负责提供主机和浏览器信息);3.测试脚本。
6.文件上传
例:
#非input标签的文件上传,就不适用于此方法了。
#定位所有iframe,取第二个
iframe = driver.find_elements_by_tag_name(‘iframe’)[1]
#切换到iframe上
driver.switch_to_frame(iframe)
#文件路径
driver.find_element_by_name(‘file’).send_keys(r"D:\test\xuexi\test\14.png")
7.获取属性
driver.title #获取标题
driver.find_element_by_id(“setf”).text #获取文本
driver.find_element_by_id(“kw”).tag_name #获取元素标签
driver.find_element_by_id(“kw”).get_attribute(“class”)#获取元素其他属性
driver.find_element_by_id(“kw”).send_keys(“yoyoketang”)#获取输入框内容
value = driver.find_element_by_id(“kw”).get_attribute(“value”)
driver.name#获取浏览器名
8.判断元素是否存在的方法
def is_element_exist(css):
s = driver.find_elements_by_css_selector(css_selector=css)#这句最关键
if len(s) == 0:
print “元素未找到:%s”%css
return False
elif len(s)== 1:
return True
else:
print “找到%s个元素:%s”%(len(s),css)
return False
#判断页面上有无id为kw的元素
if is_element_exist("#kw"):
driver.find_element_by_id(“kw”).send_keys(“yoyoketang”)
#判断alert
from selenium.webdriver.support import expected_conditions as EC
result = EC.alert_is_present()(driver)
if result:
print result.text
result.accept()
else:
print “alert 未弹出!”
#判断text
locator = (“name”, “tj_trnuomi”)
text = u"糯米"
result = EC.text_to_be_present_in_element(locator, text)(driver)
#result = EC.text_to_be_present_in_element_value(locator2, text2)(driver)也可以
print result
9.爬页面源码
selenium的page_source方法可以获取到页面源码。例:
from selenium import webdriver
import re
driver = webdriver.Firefox()
driver.get(“http://www.cnblogs.com/yoyoketang/”)
page = driver.page_source
print page
#“非贪婪匹配,re.S(’.'匹配字符,包括换行符)”
url_list = re.findall('href="(.
?)"’, page, re.S)
url_all = []
for url in url_list:
if “http” in url:
print url
url_all.append(url)
#最终的url集合
print url_all
10.显式等待
可参考:https://huilansame.github.io/huilansame.github.io/archivers/sleep-implicitlywait-wait
class WebDriverWait(object):driver, timeout, poll_frequency
driver:返回浏览器的一个实例,这个不用多说
timeout:超时的总时长
poll_frequency:循环去查询的间隙时间,默认0.5秒。例:
WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id(“kw”)).send_keys(“yoyo”)
#判断id为kw元素是否消失
is_disappeared = WebDriverWait(driver, 10, 1).
until_not(lambda x: x.find_element_by_id(“kw”).is_displayed())
print is_disappeared
11.cookie
参考:https://www.jianshu.com/p/ff10547a3587
https://cuiqingcai.com/968.html
https://www.cnblogs.com/yoyoketang/p/6535391.html
简言之,Cookie 用于存储 web 页面的用户信息。Cookie的几种常用方法如下:
1.get_cookies():获取所有cookies
2.driver.get_cookie(name):获取指定name的cookie:
3.清除指定cookie:delete_cookie()
4.delete_all_cookies():清除所有cookies
5.add_cookie(cookie_dict):添加cookie的值
例:实现网站登陆:
import urllib
import urllib2
import cookielib
filename = ‘cookie.txt’
#声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件
cookie = cookielib.MozillaCookieJar(filename)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
postdata = urllib.urlencode({
‘stuid’:‘201200131012’,
‘pwd’:‘23342321’
})
#登录教务系统的URL
loginUrl = ‘http://jwxt.sdu.edu.cn:7890/pls/wwwbks/bks_login2.login
#模拟登录,并把cookie保存到变量
result = opener.open(loginUrl,postdata)
#保存cookie到cookie.txt中
cookie.save(ignore_discard=True, ignore_expires=True)
#利用cookie请求访问另一个网址,此网址是成绩查询网址
gradeUrl = ‘http://jwxt.sdu.edu.cn:7890/pls/wwwbks/bkscjcx.curscopre
#请求访问成绩查询网址
result = opener.open(gradeUrl)
print result.read()
#也可用抓包工具,添加Cookie变量后refresh
12.判断元素
title_is: 判断当前页面的title是否完全等于(==)预期字符串,返回布尔值
title_contains : 判断当前页面的title是否包含预期字符串,返回布尔值
presence_of_element_located : 判断某个元素是否被加到了dom树里,并不代表该元素一定可见
visibility_of_element_located : 判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0
visibility_of : 跟上面的方法做一样的事情,只是上面的方法要传入locator,这个方法直接传定位到的element就好了
presence_of_all_elements_located : 判断是否至少有1个元素存在于dom树中。举个例子,如果页面上有n个元素的class都是’column-md-3’,那么只要有1个元素存在,这个方法就返回True
text_to_be_present_in_element : 判断某个元素中的text是否 包含 了预期的字符串
text_to_be_present_in_element_value : 判断某个元素中的value属性是否 包含 了预期的字符串
frame_to_be_available_and_switch_to_it : 判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False
invisibility_of_element_located : 判断某个元素中是否不存在于dom树或不可见
element_to_be_clickable : 判断某个元素中是否可见并且是enable的,这样的话才叫clickable
staleness_of : 等某个元素从dom树中移除,注意,这个方法也是返回True或False
element_to_be_selected : 判断某个元素是否被选中了,一般用在下拉列表
element_selection_state_to_be : 判断某个元素的选中状态是否符合预期
element_located_selection_state_to_be : 跟上面的方法作用一样,只是上面的方法传入定位到的element,而这个方法传入locator
alert_is_present : 判断页面上是否存在alert

猜你喜欢

转载自blog.csdn.net/weixin_43330757/article/details/98585755
今日推荐