web 自动化脚本生成方式:
1、selenium IDE 直接录屏,录制完成生成脚本
缺点:容易产生很多错误,解决错误的时间成本太高
2、自己写:
remote复用已有浏览器(相当于开启浏览器调试模式)
(1)配置复用浏览器:(注意要关闭浏览器,包括后台进程)
浏览器的位置
添加到系统变量-path中
启动命令
windows:chrome --remote-debugging-port=9222
mac:Google\ Chrome --remote-debugging-port=9222
然后看本地浏览器是否能访问http://127.0.0.1:9222/
复用浏览器的代码设置:
from selenium.webdriver.chrome.options import Options
def test_login():
option = Options()
option.debugger_address = "localhost:9222"
self.driver = webdriver.Chrome(options=option)
self.driver.get("https://work.weixin.qq.com/wework_admin/frame")
# 把cookie存到文件中
cookies=self.driver.get_cookies()
with open("./datas03.yaml","w",encoding="UTF-8")as f:
yaml.dump(cookies,f)
使用方法:
1.命令行启动,
2.执行test_login登录,并手动扫码
3.保持2中页面不关闭(亲测一旦关闭,后续执行代码无法跳过扫码)
4.后续代码执行即可(使用cookie自动登录–>页面操作)
cookie登录
cookie适用于记录用户登录信息,登陆过一次后,获取cookie然后下次使用cookie登录即可
def test_cookie():
# 用cookie登陆,直接跳过扫码
driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get("https://work.weixin.qq.com/wework_admin/loginpage_wx")
with open("./datas03.yaml",encoding="UTF-8")as f:
cookies=yaml.safe_load(f)
for cookie in cookies:
driver.add_cookie(cookie)
driver.get("https://work.weixin.qq.com/wework_admin/frame#profile")
定位元素进行操作
ps:
关于定位元素By.CSS_SELECTOR和driver.find_element_by_css的区别:
m=(By.CSS_SELECTOR,".ww_operationBar .js_add_member")
print("m:",m)
n=driver.find_element_by_css_selector(".ww_operationBar .js_add_member")
print("n:",n)
以上打印结果:
m: (‘css selector’, ‘.ww_operationBar .js_add_member’)
n: <selenium.webdriver.remote.webelement.WebElement
(session=“4aff42dd618ef228a8267da5966b3549”,
element=“202ee31d-9991-40a7-b026-ad298e022ef8”)>
对于显示等待,
WebDriverWait(driver,5).until(expected_conditions.element_to_be_clickable(ele))
要求接收的参数ele不是WebElement类型,因此,显示等待使用by.css…方式
登录企业微信
driver.get("https://work.weixin.qq.com/wework_admin/frame")
driver.find_element_by_id("menu_contacts").click()
ele=(By.CSS_SELECTOR,".ww_operationBar .js_add_member")
WebDriverWait(driver,5).until(expected_conditions.element_to_be_clickable(ele))
driver.find_element_by_css_selector(".ww_operationBar .js_add_member").click()
.........
# 添加断言,判断是否成功添加
eles=driver.find_elements_by_css_selector(".member_colRight_memberTable_td:nth-child(2)")
print(eles)
for i in eles:
if i.get_attribute("title")=="lasrrst":
return True
项目所需依赖可以建立requirement文件:
(1)pip list:列出所有pip包
(2)执行
pip freeze > requirements.txt
将包重定向到文件中
(3)pip install -r requirement.txt安装所需包
断言
获取元素的值:
定位到元素x,然后x.get_attribute(“某一个属性”)