处理cookie时,需要webdriver先访问到合法的cookie域,添加cookie然后再次访问即可,比如(name和value字段分别表示cookie的键和值):
ff.get('http://localhost:5000/')
ff.add_cookie({'name': 'username', 'value': 'marsloo'})
ff.get('http://localhost:5000/')
# 获取当前域的cookies
print ff.get_cookies()
上述代码的输出可能为:
[{u'domain': u'localhost', u'name': u'username', u'value': u'marsloo', u'expiry': None, u'path': u'', u'httpOnly': False, u'secure': False}]
如果请求的页面使用了长期的AJAX,Selenium不会等待其请求完成后再将控制权交给脚本。为了恰当定位到所需的元素,需要使用Selenium的等待功能,最简单的是这种:
# 对于所有元素获取,会等待3秒
ff.implicitly_wait(3)
try:
a = ff.find_element_by_partial_link_text('g')
a.click()
except NoSuchElementException:
print "Page load fail or no such element"
在每一个浏览器会话中只应该调用一次implicitly_wait方法。如果相对每个元素获得更改不同的超时时间firefox50 selenium,可以这样做(其他最具体的代码可以在我的github项目获得):
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
@auto_close
def func():
try:
a = WebDriverWait(ff, 3).until(
EC.presence_of_element_located((By.TAG_NAME, "p")))
a.click()
except TimeoutException:
print "No such element"
上述代码中的(By.TAG_NAME, "p")元组,在以下的解释中以locator参数代替。expected_conditions对象也有这些方式可以使用:
使用Chrome进行检测,需要先下载Chrome Driver (可能必须翻墙),解压缩后代码如下:
driver = webdriver.Chrome(executable_path="./chromedriver")
首先下载Opera Driver,解压缩后代码如下:
webdriver_service = service.Service('./operadriver')
webdriver_service.start()
driver = webdriver.Remote(webdriver_service.service_url,
webdriver.DesiredCapabilities.OPERA)
driver.get('https://www.baidu.com')
Safari 10已经开始内置自动化测试的支持,Safari偏好设置->高级->在菜单栏中显示“开发”菜单,然后开发->允许远程自动化,最后下载Selenium Server的jar包,测试脚本如下:
# -*- coding: utf-8 -*-
from selenium import webdriver
import time
import os
os.environ["SELENIUM_SERVER_JAR"] = "selenium-server-standalone-2.53.1.jar"
# 设置quiet模式,否则会打印很多log
driver = webdriver.Safari(quiet=True)
driver.get('https://www.baidu.com')
assert u'百度一下,你就知道' in driver.title
print u"当前URL:", driver.current_url
time.sleep(4)
driver.quit()
使用driver.save_screenshot(filename)可以保存浏览器的运行截图(默认是覆盖写入)。
使用ff.execute_script("window.scrollTo(0, document.body.scrollHeight);")可以滚动到屏幕上面。
如果认为我的文章对您有帮助,欢迎关注我(CSDN:Mars Loo的博客)或者为这篇文章点赞,谢谢!
发布了87 篇原创文章 · 获赞 187 · 访问量 50万+
他的留言板关注
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-143957-2.html