Python selenium 的日常使用示例

import os.path
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup


# 创建一个Firefox浏览器实例,需要提前下载好文件,设置好环境变量
#Chrome:    https://sites.google.com/a/chromium.org/chromedriver/downloads
#Edge:    https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
#Firefox:    https://github.com/mozilla/geckodriver/releases
#Safari:    https://webkit.org/blog/6900/webdriver-support-in-safari-10/
# driver = webdriver.Chrome(r"D:\Program Files\JetBrains\PyCharm Community Edition 2023.1.4\bin\chromedriver.exe")
driver = webdriver.Firefox()  # 打开火狐浏览器

# 等待页面加载完毕,属于隐式等待,10秒钟内只要找到了元素就开始执行,10秒钟后未找到,就超时,会报NosuchElementError;
# 在此执行,后续的都会有效,作用于全局
# 必须加载完所有页面才执行代码,执行效率低
# 不适合用在数据在ajax的网站中,比如翻页
driver.implicitly_wait(10)

"""
# 引入WebDriverWait
# 引入WebDriverWait 显示等待,需要两个类:WebDriverWait和expected_conditions两个类
from selenium.webdriver.support.ui import WebDriverWait
#引入expected_conditions类,并重命名为EC
from selenium.webdriver.support import expected_conditions as EC
#引入By类
from selenium.webdriver.common.by import By
# Python小白学习交流群:711312441
#设置等待
wait = WebDriverWait(driver, 10, 0.5)
wait.until(EC.presence_of_element_located((By.ID, 'KW')))
# WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
# driver:浏览器驱动
# timeout:最长超时时间,默认以秒为单位
# poll_frequency:检测的间隔步长,默认为0.5s
# ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常。
"""


# 打开ERP页面
driver.get('http://erp.xiangXXX.com/login')
username = "zhangfzh"  # 输入用户名
password = 'zhangfuzhou010'  # 输入密码
driver.find_element('xpath', '//*[@id="userName"]').send_keys(username)  # 输入用户名
driver.find_element('xpath', '//*[@id="userPasswd"]').send_keys(password)  # 输入密码
print("等待输入验证码")
time.sleep(3)
driver.find_element('xpath', '//*[@class="btn01"]').click()  # 点击按钮登录
print(driver.get_cookies())  # 打印获取到的cookie
print("登录成功,关闭本选项卡。")
time.sleep(1)
# driver.close()

driver.get('https://www.shiwens.com/')  # 打开新链接
# 通过id == txtKey  找到搜索框,输入关键字搜索
driver.find_element('xpath', '//*[@id="txtKey"]').send_keys("李白")  # 在选项框输入关键字“李白”
# 通过id == top_submit 找到搜索按钮,左键单击按钮
driver.find_element('xpath', '//*[@id="top_submit"]').click()  # 点击搜索按钮
# print(driver.get_credentials('textContent'))  # 无效代码
html = driver.page_source  # 获取网页源代码
soup = BeautifulSoup(html, 'html.parser')
print(soup.text)
print("内容打印成果")
time.sleep(10)


# 打开百度搜索页面
driver.get('http://www.baidu.com')
# 通过id == kw  找到搜索框,输入关键字搜索
driver.find_element('xpath', '//*[@id="kw"]').send_keys("数据安全法")
# 清空输入框内容
time.sleep(2)  # 当某个页面元素变化多,影响多的情况下,用sleep,等页面元素稳定了,再定位。比如会出现弹窗,等待弹窗关闭再操作。
# 获取搜索框的宽高 返回的信息实例:{'height': 38.0, 'width': 503.0}
size_kw = driver.find_element('xpath', '//*[@id="kw"]').size
print(size_kw)
driver.find_element('xpath', '//*[@id="kw"]').clear()  # 清空搜索框内容
time.sleep(2)
driver.find_element('xpath', '//*[@id="kw"]').send_keys("个人信息保护法")  # 在搜索框重新输入关键字搜索
driver.find_element('xpath', '//*[@id="su"]').click()  # 通过id == su 找到搜索按钮,左键单击按钮
driver.maximize_window()  # 窗口最大化

print("##1")
# ####################################################################################
print(driver.page_source)  # 获取网页源代码
print("#################################")
# 获得当前窗口句柄,得到结果示例:b295cc7a-c390-4104-8aac-2cb7c2801b23
print(driver.current_window_handle)

driver.minimize_window()  # 最小化窗口
print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
print(driver.window_handles)  # 获得当前窗口句柄,得到结果示例:['b295cc7a-c390-4104-8aac-2cb7c2801b23']
print(driver.name)  # 驱动浏览器的名称,如Firefox
print(driver.get_window_size())  # 获取浏览器的宽度和高度 :{'width': 1382, 'height': 744}

print(driver.get_window_position())  # 打印浏览器左上角坐标的X,Y值 :{'x': -8, 'y': -8}
driver.set_window_size(1300, 800)  # 设置浏览器的宽度和高度
driver.set_window_position(100, 200)  # 设置浏览器左上角坐标的X,Y值

# 截屏,存放
# 截屏图片存放路径:
screenshot_dir = os.path.join(os.path.dirname(__file__), "screenshots")
# 确定目录是否存在,不存在则创建目录
if not os.path.exists(screenshot_dir):
    os.makedirs(screenshot_dir)
# 获取二进制文件
png_data = driver.get_full_page_screenshot_as_png()
# 定义文件名(加路径)
filename = os.path.join(screenshot_dir, "test.get.screenshot_as_png2.png")
# 存储截图
with open(filename, "wb") as f_file:
    f_file.write(png_data)


# 访问另外一个页面
driver.get('https://book.douban.com')
# 定位搜索框 id="inp-query" ,输入内容
driver.find_element('xpath', '//*[@id="inp-query"]').send_keys("数据安全")
# 强制等待3s;
time.sleep(3)  #
# 点击搜索
driver.find_element('xpath', '//*[@class="inp-btn"]').click()

print("##2")
driver.execute_script('window.open()')  # 执行脚本打开一个新窗口
driver.switch_to.window(driver.window_handles[1])  # 切换到新窗口
driver.get('https://movie.douban.com')  # 访问豆瓣电影

driver.execute_script('window.open()')  # 执行脚本打开一个新窗口
driver.switch_to.window(driver.window_handles[2])  # 切换到新窗口
driver.get('https://music.douban.com/')  # 访问豆瓣音乐

driver.switch_to.window(driver.window_handles[0])  # 切换到第一个窗口

driver.find_element('xpath', '//*[@id="inp-query"]').send_keys("信息安全")  # 一般需要将选框中的内容清除掉再填写
# 强制等待3s;
time.sleep(3)  #
# 点击搜索
driver.find_element('xpath', '//*[@class="inp-btn"]').click()
print("##3")



# 鼠标滑动
from selenium import webdriver
import time
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
print("最大化屏幕")
time.sleep(2)
driver.maximize_window()

# 等待元素出现,再执行操作
WebDriverWait(driver, 20).until(lambda driver:driver.find_element('id', 'kw')).send_keys('selenium')
WebDriverWait(driver, 20).until(lambda driver:driver.find_element('id', 'su')).click()

time.sleep(2)
print("模拟鼠标滚轮,滑动至页面底部")
time.sleep(2)
js = "window.scrollTo(0, document.body.scrollHeight)"  # 模拟鼠标滚轮,滑动至页面底部
driver.execute_script(js)

print("向下滑动500个像素")
time.sleep(2)
js = "window.scrollTo(0, 500)"  # 向下滑动500个像素
driver.execute_script(js)

print("模拟鼠标滑动到顶部")
time.sleep(2)
js = "window.scrollTo(0,0)"  # 模拟鼠标滑动到顶部
driver.execute_script(js)

print("向上滑动500个像素")
time.sleep(2)
js = "window.scrollTo(0, -500)"  # 向上滑动500个像素
driver.execute_script(js)

js = "window.scrollTo(500, 0)"  # 向右滑动500个像素
driver.execute_script(js)
time.sleep(1)

js = "window.scrollTo(-500, 0)"  # 向左滑动500个像素
driver.execute_script(js)
time.sleep(1)

# 目标元素
ele = driver.find_element('xpath', '/html/body/div[3]/div[1]/div[2]/a')
# 向下滚动至目标元素可见
js = "arguments[0].scrollIntoView();"
driver.execute_script(js, ele)
#
# 向上滚动至目标元素可见
js = "arguments[0].scrollIntoView(false);"
driver.execute_script(js, ele)



time.sleep(6)
# 退回上一页
driver.back()
# 强制等待5s
time.sleep(5)
# 退回下一页
driver.forward()
# 刷新页面
driver.refresh()
# 打印页面标题
print(driver.title)
# 获取当前的URL,打印网址
print(driver.current_url)
# 打印窗口ID
print(driver.current_window_handle)
# 获取文本的值
# print(input.text)  # 此处执行有问题  ++++++++++++++++================
# 强制等待5s
time.sleep(5)
# 关闭浏览器
driver.quit()

driver.virtual_authenticator_id
driver.add_cookie()
driver.context()
driver.command_executor
driver.install_addon()
driver.get_cookies()
driver.get_window_rect()
driver.find_elements()
driver.fullscreen_window()
driver.file_detector_context()

 

posted @ 2023-08-20 16:15  sszqxt  阅读(88)  评论(0编辑  收藏  举报