selenium命令

1.简单Demo
2.find系列函数定位元素
3.参数设置&设置代理
4.窗口切换 和 ifrme切换
5.鼠标操作
6.键盘操作
7.其它方法
8.上传附件

1.简单Demo
from selenium import webdriver
import time

# 创建浏览器对象
# browser = webdriver.Chrome('./chromedriver')
browser = webdriver.Chrome()

# 访问网页
browser.get("https://www.baidu.com/")
# 获取输入框元素
input_element = browser.find_element_by_id("kw")
# 输入内容
input_element.send_keys('itcast')
button_element = browser.find_element_by_id('su')
button_element.click()

time.sleep(1)
url_element = browser.find_element_by_class_name("favurl")
url_element.click()
time.sleep(5)
#  退出浏览器
browser.quit()



# 获取用户名文本框大小
size=driver.find_element_by_id("userA").size
print('size:',size)
# 获取a标签内容
text=driver.find_element_by_id("fwA").text
print('a标签text:',text)
# 获取title
title=driver.title
print('title:',title)
# 获取当前页面url
url=driver.current_url
print('url:',url)
# 获取a标签href属性值
href=driver.find_element_by_id("fwA").get_attribute("href")
print('href属性值为:',href)
# 判断span是否显示
display=driver.find_element_by_css_selector('span').is_displayed()
print('span标签是否显示:',display)
# 判断取消按钮是否可用
enabled=driver.find_element_by_id('cancelA').is_enabled()
print('取消按钮是否可用:',enabled)

# 判断选项是否已经勾上
 element = driver.find_element_by_xpath('//div[1]/div[2]/div[1]/span/input')
 if  element.is_selected():   
        print("按钮已经勾选了")

# 只匹配部分class值
driver.find_element_by_xpath('//div[contains(@class, "t-drawer--open")]')

# 拖动滑块
from selenium.webdriver import ActionChains
element = self.driver.find_elements_by_xpath('//div[@id="captcha"]/div/div/span')
if element:
    ActionChains(self.driver).drag_and_drop_by_offset(element[0], 1120, 180).perform()


# 在同一个浏览器上,打开新标签
js = "window.open('{}','_blank');"
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
for _ in range(1):
    driver.execute_script(js.format(
        "https://www.baidu.com/"))
time.sleep(8)

# 添加cookie
1.需要先访问目标网站
2.再设置cookie,然后再访问目标网站才会生效

driver.get("https://www.baidu.com/")
# driver.add_cookie({"name": key值, "value":value值, "domain": ".woa.com"})
driver.add_cookie( {'name': 'foo', 'value': 'bar'})
driver.get("https://www.baidu.com/")

添加多个cookie
cookies = [
        {'name': 'foo', 'value': 'bar'},
        {'name': 'baz', 'value': 'qux'}
        ]
driver.add_cookies(cookies)

2.find系列函数定位元素
find_element_by_xxx 返回第一个符合条件 WebElement
find_elements_by_xxx 返回符合条件所有元素的WebEelemnt列表

find函数系列说明:
    find_element_by_xpath 通过xpath查找数据
    find_element_by_class_name 通过class 查询元素
    find_element_by_id 通过 ID
    find_element_by_name 通过name
    find_element_by_tag_name 通过标签名称
    find_element_by_css_selector css样式选择
    find_element_by_link_text 通过链接内容查找
    find_element_by_partial_link_text 通过链接内容包含的内容查找,模糊查询

3.参数设置&设置代理
1.设置 chrome 启动参数
        options = webdriver.ChromeOptions()
        options.add_argument('--headless') # 开启无界面模式
        options.add_argument('--disable-gpu') # 禁用gpu,解决一些莫名的问题
        browser = webdriver.Chrome('./chromedriver',chrome_options=options)
        # 截图
        browser.save_screenshot('截图路径')
    
2.启动设置User-Agent和代理
    options = webdriver.ChromeOptions()
    # 切换User-Agent
    options.add_argument('--user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1')
    # 设置代理
    options.add_argument('--proxy-server=代理服务器地址') # 设置代理
    browser = webdriver.Chrome('./chromedriver',chrome_options=options)

4.窗口切换 和 ifrme切换
1.浏览器可能会打开多个网页,需要定位当前获取的网页元素是哪个窗体
# 通过点击可能会打开网页
# 获取当前窗体的列表
print(browser.window_handles)
# 获取当前选中窗体的名称
print(browser.current_window_handle)
print("切换前:",browser.title)
# 切换窗体
browser.switch_to.window(browser.window_handles[1])
print("切换后:",browser.title)

2.浏览器网页中可能包含 iframe 网页,需要获取 iframe(frame) 网页元素
通过 browser.switch_to.frame 切换iframe
    
    eg: 网易云歌曲: https://music.163.com/#/discover/playlist
    # 1> 获取iframe 元素对象
    iframe_element = browser.find_element_by_id('g_iframe')
    or:
    iframe_element = browser.find_element_by_xpath('//iframe[@name="contentFrame"]')
    # 2> 切换 iframe
    browser.switch_to.frame(iframe_element)
    print("切换后:",browser.page_source)

    # 3> 切换回 主窗口
    browser.switch_to.default_content()
    print("切回后:",browser.page_source)

5.鼠标&键盘操作
context_click()            右击 --> 此方法模拟鼠标右键点击效果
double_click()             双击 --> 此方法模拟双标双击效果
drag_and_drop()            拖动 --> 此方法模拟双标拖动效果
move_to_element()          悬停 --> 此方法模拟鼠标悬停效果
perform()                  执行 --> 此方法用来执行以上所有鼠标方法

1. 使用方法
from selenium.webdriver.common.action_chains import ActionChains
2. 实例化ActionChains对象:
Action=ActionChains(driver)
3. 调用右键方法:
element1=Action.context_click(element) 
4. 执行:
element1.perform()

6.键盘操作
send_keys(Keys.BACK_SPACE)删除键(BackSpace) 
send_keys(Keys.SPACE)空格键(Space) 
send_keys(Keys.TAB)制表键(Tab) 
send_keys(Keys.ESCAPE)回退键(Esc) 
send_keys(Keys.ENTER)回车键(Enter) 
send_keys(Keys.CONTROL,'a') 全选(Ctrl+A) 
send_keys(Keys.CONTROL,'c')复制(Ctrl+C)


# 定位用户名
element=driver.find_element_by_id("userA")
# 输入用户名
element.send_keys("admin1")
# 删除1
element.send_keys(Keys.BACK_SPACE)
# 全选
element.send_keys(Keys.CONTROL,'a')
# 复制
element.send_keys(Keys.CONTROL,'c')
# 粘贴
driver.find_element_by_id('passwordA').send_keys(Keys.CONTROL,'v')
7.其它方法
1.获取元素属性和文本内容
    # 获取属性
    element..get_attribute('属性名')
    # 获取文本内容
    element.text
2.获取网页源码
    browser.page_source
    
3.常用方法
    element.clear()                   清除文本
    element.send_keys('xxxx')         输入
    element.click()                   单击元素
    
    driver.maximize_window()                   最大化 --> 模拟浏览器最大化按钮
    driver.set_window_size(100,100)            浏览器大小 --> 设置浏览器宽、高(像素点)
    driver.set_window_position(300,200)        浏览器位置 --> 设置浏览器位置
    driver.back()                              后退 --> 模拟浏览器后退按钮
    driver.forward()                           前进 --> 模拟浏览器前进按钮
    driver.refresh()                           刷新 --> 模拟浏览器F5刷新
    driver.close()                             关闭 --> 模拟浏览器关闭按钮(关闭单个窗口)
    driver.quit()                              关闭 --> 关闭所有WebDriver启动的窗口
    driver.title                               获取title
    current_url                                获取当前页面URL
    
    
4.执行 javascript 代码

    # 去到页面最底层
    js1="window.scrollTo(0,1000)"
    # 去到页面最顶层
    js2="window.scrollTo(0,0)"
    
    # 执行最底层
    driver.execute_script(js1)
    # 执行最顶层
    driver.execute_script(js2)

    # 执行多条js命令
    # 定位到滚动条所在的元素,然后进行滚动
    script = 'var a = document.getElementsByClassName("apply-detail-contain")[0];  a.scrollTo(0, 1000);'
    driver.execute_script(script)

8.上传附件
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChains
from pykeyboard import PyKeyboard

class Test:
    @staticmethod
    def test():
        chrome_options = Options()
        # 设置Chrome忽略网站证书错误
        chrome_options.add_argument('--ignore-certificate-errors')
        driver = webdriver.Chrome(options=chrome_options)

        driver.get(要访问的网站)
        driver.set_window_size(width=2576, height=1416)
        time.sleep(10)
        print("开始")

        # 定位上传附件的按钮
        driver.find_element_by_xpath(xxxxx).click()
        time.sleep(5)

        # 要上传的附件地址
        file_path = r"E:\ceshi.png"

        # 方法一: 通过ActionChains去输入附件的地址
        ActionChains(driver).send_keys(file_path).perform()

        # 方法二:通过键盘操作去输入附件的地址
        board = PyKeyboard()
        # 输入附件的地址
        board.type_string(file_path)
        time.sleep(3)

        # 按键操作(可能需要进行调整,这里点击了两次确定键)
        for _ in range(2):
            board.tap_key(board.enter_key)

        # 另外一种方式去发生确定键
        board.tap_key("Enter")
        time.sleep(5)
        driver.close()

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。

文章标题:selenium命令

本文作者:伟生

发布时间:2021-03-06, 19:01:21

最后更新:2024-06-19, 21:37:42

原始链接:http://yoursite.com/2021/03/06/spider_13_selenium/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏