selenium笔记

find_element源码解析

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
ele = driver.find_element('css selector', '.title-content-title')

# find_element源码
def find_element(self, by=By.ID, value=None) -> WebElement:
    """
    Find an element given a By strategy [策略] and locator.

    :Usage:
        ::

            element = driver.find_element(By.ID, 'foo')

    :rtype: WebElement
    """
    if isinstance(by, RelativeBy):  # 针对相对定位  selenium4.0之后的一个定位方式
        elements = self.find_elements(by=by, value=value)
        if not elements:
            raise NoSuchElementException(f"Cannot locate relative element with: {by.root}")
        return elements[0]  # 获取元素列表中的第一个元素
    # 进一步解析ID,class_name,name本质上还是css定位
    if by == By.ID:  # 如果by是根据ID则直接替换为[css selector,id=value]的格式
        by = By.CSS_SELECTOR
        value = '[id="%s"]' % value
    elif by == By.CLASS_NAME:  # 如果by是根据class name,则直接替换为[css selector,.value]的格式[可以解析为何class='pn vn'时的编写格式为pn.vm]
        by = By.CSS_SELECTOR
        value = ".%s" % value
    elif by == By.NAME:  # 如果by是根据name则直接替换为[css selector,name=value]的格式
        by = By.CSS_SELECTOR
        value = '[name="%s"]' % value
    # tag name的格式与css selector的格式一致,则无需进行转换
    return self.execute(Command.FIND_ELEMENT, {
        'using': by,
        'value': value})['value']

webdriver基础操作

  1. 获取wendriver的属性和方法(魔术方法除外)
from selenium import webdriver

driver = webdriver.Chrome()
for _ in dir(driver):
    if _[0] != "_": # 排除魔术方法
        print(_)
  1. 窗口操作
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
# 窗口最大化
driver.maximize_window()
# 窗口最小化
driver.minimize_window()
# 全屏
driver.fullscreen_window()
# 设置窗口大小
driver.set_window_size(600, 800)

3.浏览器的属性操作

from selenium import webdriver

driver = webdriver.Chrome()

driver.get('https://www.baidu.com')
# 当前网页的url
print(driver.current_url)
# 浏览器的标题
print(driver.title)
# 浏览器的名字
print(driver.name)
# 浏览器的页面源码
print(driver.page_source)

4.浏览器的退出和关闭操作

import time
from selenium import webdriver

driver = webdriver.Chrome()
time.sleep(5)
# 浏览器的退出
driver.quit()  # 直接退出浏览器程序,关闭所有标签页
# 浏览器的关闭
driver.close()  # 只关闭当前标签页

5.浏览器的前进后退和刷新操作

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://passport.jd.com/")
driver.find_element('css selector', '.style-red').click()  # 点击登录
# 浏览器的后退
driver.back()
# 浏览器的前进
driver.forward()
driver.find_element('css selector', "input[id='loginname']").send_keys("admin")  # 登录页面输入用户名
time.sleep(5)  # 调试作用,方便观察现象
# 浏览器刷新
driver.refresh()  # 刷新页面输入的用户名重置

无头浏览器

历史由来:PhantomJS【selenium3.x版本中存在webdriver.PhantomJS(),后期selenium4.0废除】

from selenium import webdriver

myoption = webdriver.ChromeOptions()
# ‘-headless’和'--headless'在chrome中都可以进行使用
myoption.add_argument('--headless') 
myoption.add_argument('-headless')
driver = webdriver.Chrome(options=myoption)
driver.get('https://www.baidu.com')
driver.save_screenshot('baidu.png')  # 验证浏览器无界面启动

selenium操作绕过登录操作

方式一:

原理: 使用option中的add_argument添加用户数据路径的参数携带用户数据进行登录操作

前提条件:
1.已经登录过一次,存在用户数据
2.运行之前关闭其余浏览器,否则会出现用户数据路径在使用的类似报错信息

# 01 登录一次需要登录的网站
#     chrome输入chrome://version/获取个人资料路径【C:\Users\xxx\AppData\Local\Google\Chrome\User Data\Default】
#     去掉    Default得到C:\Users\xxx\AppData\Local\Google\Chrome\User Data


from selenium import webdriver

myoption = webdriver.ChromeOptions()
user_data = r'C:\Users\23936\AppData\Local\Google\Chrome\User Data'
myoption.add_argument(f'--user-data-dir={user_data}')
driver = webdriver.Chrome(options=myoption)
driver.get('https://xmind.cn/')
  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值