【selenium实战1】企业微信登录实战

怎么找报错信息

  1. 从代码的后面往前看。代码开头有个大写E的一般就是报错信息。
  2. 报错行(可能有多个)文件名+代码行数

selenium

官方文档:https://www.selenium.dev/documentation/en/

注册企业微信:https://work.weixin.qq.com/

复用已有浏览器

  1. 需要退出当前所有的谷歌浏览器
  2. 找到chrome的启动路径(下一页ppt)
  3. 配置环境变量(下一页ppt)
  4. 启动命令windows:chrome --remote-debugging-port=9222
    启动命令mac:Google\ Chrome --remote-debugging-port=9222
  5. 访问http://localhost:9222/

windows 启动路径

mac启动路径

/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
注意:使用tab键,不要手动输入

启动命令

启动命令windows:
chrome --remote-debugging-port=9222
启动命令mac:
Google\ Chrome --remote-debugging-port=9222

from selenium import webdriver
#小写的chrome
from selenium.webdriver.chrome.options import Options

class TestLogin:
    def test_debug_login(self):
        option = Options()
        option.debugger_address = "localhost:9222"
        driver = webdriver.Chrome(options=option)
        driver.get("https://work.weixin.qq.com/")

cookie登录

import os

from selenium import webdriver
import time
import json

from selenium.webdriver.common.by import By


class TestCookie:
    def setup(self):
        self.driver = webdriver.Chrome()
        self.driver.get("https://work.weixin.qq.com/")


    def test_get_cookie(self):
        """
        获取cookie
        :return:
        """

        time.sleep(10)
        cookie = self.driver.get_cookies()
        with open("cookie.json", "w") as f:
            #将cookie存入一个json文件中
            json.dump(obj=cookie, fp=f)


    def test_cookie_login(self):
        cookies = json.load(open("./cookie.json"))
        #循环cookies列表,将所有cookie添加到浏览器中
        for cookie in cookies:
            if "expiry" in cookie:
                cookie.pop("expiry")
        ## 只添加一个cookie
            self.driver.add_cookie(cookie)
        time.sleep(2)

        self.driver.get("https://work.weixin.qq.com/wework_admin/frame")
        time.sleep(2)
        self.driver.find_element(By.CSS_SELECTOR,".index_service_cnt_itemWrap:nth-child(2)").click()
        #dir 获取的就是当前文件的绝对路径
        dir = os.path.dirname(__file__)
        #上传文件,上传文件可以使用send_keys。前提元素的标签必须为input。
        #send_keys里面放的文件,必须是绝对路径
        time.sleep(2)
        self.driver.find_element(By.ID,"js_upload_file_input").send_keys(dir+"/data.xlsx")

        ele_name = self.driver.find_element(By.ID, "upload_file_name").text
        # 断言上传文件的名称
        assert ele_name== "data111.xlsx"

关闭