首页 > 编程语言 >Python selenium 的日常使用示例

Python selenium 的日常使用示例

时间:2023-08-20 16:22:37浏览次数:41  
标签:示例 Python selenium driver window sleep time print id

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()

 

标签:示例,Python,selenium,driver,window,sleep,time,print,id
From: https://www.cnblogs.com/kaixin2018/p/17644164.html

相关文章

  • 「Python」第二阶段第一章笔记
    初识对象"""初识对象"""#1.设计一个类classStu:name=None#学生姓名gender=None#学生性别nationality=None#学生国籍native_place=None#学生籍贯age=None#学生年龄#2.创建一个对象stu_1=Stu()#3.对象属性进行赋......
  • python采集京东商品详情页面数据,京东API接口,京东h5st签名(2023.08.20)
    一、原理与分析1、目标页面https://item.jd.com/6515029.html  在chrome中打开,按f12键进入开发者模式,找到商品详情数据接口,如下:2、URL链接:https://api.m.jd.com/?appid=pc-item-soa&functionId=pc_detailpage_wareBusiness&client=pc&clientVersion=1.0.0&t=1692499380806&bod......
  • ubuntu升级Python版本
    一、已有Python版本1.使用以下命令查找系统上所有安装的Python版本ls/usr/bin/python2.使用以下命令更改Python3的符号链接sudoupdate-alternatives--install/usr/bin/python3python3/usr/bin/python3.813.使用以下命令检查Python3符号链接的当前版本python3--ver......
  • Python之学生信息管理系统
    一、基础界面实现定义主函数main,并通过定义print_menu()函数输打印学生管理系统菜单#打印功能菜单defprint_menu():print('='*30)print('学生管理系统')print('1.添加学生信息')print('2.删除学生信息')print('3.修改学生信息')print('4.显示所有......
  • Python列表、元组、字典、集合、字符串
    一、代码例题1、阿凡提与国王比赛下棋,国王说要是自己输了的话阿凡提想要什么他都可以拿得出来。阿凡提说那就要点米吧,棋盘一共64个小格子,在第一个格子里放1粒米,第二个格子里放2粒米,第三个格子里放4粒米,第四个格子里放8粒米,以此类推,后面每个格子里的米都是前一个格子里的2倍,一直把64......
  • Anaconda安装与配置(Python环境及库依赖)
    一,下载安装相关1,这个软件什么作用?Anaconda:Python大礼包(包含解析器,一系列库,软件包管理器Conda)主要作用,不用配库,如果需要库a,anaconda会把库a相关的依赖库一并打包下载次要作用,可以同时安装不同版本的python,和对应依赖库,相互隔离。2,在哪下载anaconda?清华源:Indexof/anaconda/a......
  • python实现链表(单链,双链)
    #code:utf-8#createTime:2023.8.17#-----------------------------------------------------------------------------classNode:"""节点类,每个数据就是一个节点,包含一个数据位和一个指针位,指针指向下一个数据的内存地址"""def__init__(s......
  • yaml文件示例
     apiVersion:v1kind:Podmetadata:name:my-podspec:containers:-name:myhttpd#只要是包含子项的第一行都需要有”-“,且与上一行对齐image:httpdimagePullPolicy:IfNotPresentports:-containerPort:80-name:mynginx......
  • PYTHON 快速分割CSV
    fromopenpyxlimportWorkbookimportpandasaspdimportnumpyasnpimportsys,time,re,csvpath="f:/te/qh.csv"path1="F:/BaiduNetdiskDownload\行政许可/行政许可/行政许可.csv"##num_rows=sum(1forrowinopen(path,encoding="utf-8"))##......
  • python
    pythonclassBook:  def__init__(self,title,author,year):    self.title=title    self.author=author    self.year=yearclassLibrary:  def__init__(self):    self.books=[]  defadd_book(self,book):    se......