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()
————————
欢迎访问我的博客;
如果您觉得有用,请点赞!
说明:
标题带有*表示重要或待重新查看确认
标题带有#表示未编辑完成;待补充
标题带有######表示为概要目录