首页 > 其他分享 >用selenium打开网页的最小模板

用selenium打开网页的最小模板

时间:2024-08-01 14:18:20浏览次数:14  
标签:webdriver 网页 driver selenium import 等待 模板 wait

前言

环境: win10 python3.10 selenium4.12

经常用selenium来实现一个打开网页的这样一个小功能,虽然代码很少,但每次重0开始写就很烦。所以这里记录下一个模板

小模板

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from loguru import logger

# 使用selenium打开网页的最小代码结构模板
# selenium 版本4.21

# 设置chrome选项
chrome_options = Options()
chrome_options.add_argument("--start-maximized")    #最大化窗口

# 配置自动下载合适版本的webdriver驱动
service = Service(ChromeDriverManager().install())
"""
# 不自动下载,手动设置webdriver路径,以chromediver为例
chromedriver_path = r"E:\xxxxx\chromedriver.exe"  # 这里替换为你下载的webdriver的路径
service = Service(chromedriver_path)
"""
try:
    #第一层的try语句主要是防止webdiver打开浏览器出错,如驱动不匹配或未找到出现的异常
    driver = webdriver.Chrome(service=service, options=chrome_options)
    
    
    try:
	#第二层的try语句作用是,在成功打开浏览器后,若出现其它异常,能确保关闭浏览器
        # 打开目标网站 这里以百度首页为例
        driver.get('https://www.baidu.com/')

        # 以下是一些selenium的使用示例


		
	try:
		# 设置显示等待来等待指定元素,最长等待时间7s
		#未在规定时间内满足指定的等待条件,则抛出异常TimeoutException
  		wait = WebDriverWait(driver, 7)
		# 通过id的定位方式等待百度输入框的出现
		wait.until(EC.presence_of_element_located((By.ID, "kw")))
		# 通过id的定位方式等待百度一下按钮的出现
		wait.until(EC.presence_of_element_located((By.ID, "su")))
	except TimeoutException as e:
		logger.info(f'未在规定时间内满足指定的等待条件: {e}')
		raise
	except Exception as e:
		logger.info(f'等待中出现其它异常: {e}')
		raise
	
	# 百度首页输入框
	input = driver.find_element(By.ID, 'kw')
	# 输入框输入文本数据
	input.send_keys("1")
	
	#百度首页 百度一下 按钮
	baidu_buton = driver.find_element(By.ID, "su")
	# 点击按钮
	baidu_buton.click()
	
	# 强制等待多少时间
	time.sleep(2)
		                 
    except Exception as e:
	logger.info(f"发生异常 稍后关闭浏览器: {e}")
        raise
    finally:
	#关闭浏览器
        driver.quit()
    
except Exception as e:
logger.info(f"webdiver打开浏览器前发生异常: {e}")
    raise

关于显示等待和隐式等待

	# 显示等待的例子,用其来等待元素加载,针对于特定的元素起作用
	#如果未在规定的最长等待时间内满足指定的等待条件,则会抛出异常TimeoutException
        ## 最长等待时间10s
        wait = WebDriverWait(driver, 10)
        ## 等待条件-等待元素出现在DOM中
        wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'xxxx')))
        ## 等待条件-等待元素可点击
        wait.until(EC.element_to_be_clickable((By.ID, "xxxx")))
        ## 等待条件-等待元素中的文本出现
        wait.until(EC.text_to_be_present_in_element((By.ID, "xxxx"), "expected_text"))


        # 隐式等待的例子
        ##设置隐式等待时间为10秒,它在整个webdriver实例生命周期内起作用(也就是webdriver成功打开浏览器后到 浏览器关闭期间)
        ##期间在查找每一个元素时都自动受到该等待设置的影响
        driver.implicitly_wait(10)

        """
        在实际项目中,你可以综合使用隐式等待和显示等待。隐式等待可以作为全局默认的等待机制
        而显示等待可以用于处理特定的复杂场景
        """
		
	#强制等待多少时间
        time.sleep(2)
                  
  

标签:webdriver,网页,driver,selenium,import,等待,模板,wait
From: https://www.cnblogs.com/MyRecords/p/18336328

相关文章

  • Smartforms在同一页中打印多份模板,打印动态表格
    要求:一:需要在一份A4纸中打印上下两个表格,每个表格行只有5行,不够的需要补齐,超出的需要打印到第二个表格中.二:表格不是固定的,需要根据某个字段,确定使用的表格格式 解决方法,我们只需要创建一个模板高度的数据模板,通过循环来打印我们的模板,相当于每次印半页,印两次就......
  • 在AWS Lightsail建立WordPress Multisite & Route 53 subdomains & Hexo Blog & WordP
    1.0前言玩Startup比賽,因需高效快速地做POC原型產品,所以利用AWS云端服務來更快地開發。你會學到:LightSail建立WordpressmultisiteRoute53註冊WordpressSubdomains&GithubCuostomDomainLightSailCustomDomain&SSLHexo快速搭建GihubPages博客+ Route53 Custom......
  • 63.Selenium框架
    Selenium框架【一】浏览器操作1)页面操作1.初始化浏览器对象#使用环境变量fromseleniumimportwebdriverbrowser=webdriver.Chrome()browser=webdriver.Chrome(path)browser.close() #关闭浏览器#使用绝对路径fromselenium.webdriver.chrome.serviceimport......
  • 62.Xpath与Selenium
    【一】xpath1)介绍(XMLPathLanguage)一种小型的查询语言2)优点可在XML中查询支持HTML的查询通过元素和属性进行导航#安装pipinstalllxml#使用fromlxmlimportetree#将源码转化为能被XPath匹配的格式selector=etree.HTML(源码)#返回为一列表selector.xpat......
  • 网页出现 404 这些代表什么你知道吗?带你了解网络请求状态码
    每个状态码都代表不同的含义,下面我们就一起来看一看这些状态码都代表什么意思。网络请求状态码网络请求状态码是服务器在响应客户端请求时返回的三位数字代码。这些代码用于指示请求的结果,包括成功、重定向、客户端错误和服务器错误。那网络状态码有哪些?大概可以分为这五类:1......
  • [USACO5.1] 圈奶牛Fencing the Cows /【模板】二维凸包
    凸包,顾名思义,就是凸多边形包围,具体定义见OI-wiki(既是周长最小也是面积最小)有Graham算法和Andrew算法,后者精度更高常数更小(因为不涉及求角度)Andrew算法:1.将点排序(横坐标为第一关键字,纵坐标为第二关键字)2.从左到右维护上半部分,再从右到左维护下半部分。具体见OI-wiki。最后说的......
  • 如何自动从网页下载数据
    我正在尝试使用Python和Selenium自动从网站下载excel文件。我尝试过XPath,但我认为它比我的代码更复杂。就像按钮中的选择器一样。任何建议都会有用。fromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uii......
  • Python Selenium 单击 webdriverwait 与 find_element
    我无法理解这两个代码块之间的区别。发送点击在webdriverwait和find_elements中都有效。代码1fromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.suppo......
  • Selenium“没有提供‘moz:firefoxOptions.binary’功能,并且在命令行上没有设置二进制
    我一直在尝试将python脚本移植到我的wsl/bash编码中心中。我继续收到此错误:Traceback(mostrecentcalllast):File"/path/to/my/file.py",line20,in<module>driver=webdriver.Firefox(service=FirefoxService(GeckoDriverManager().install()))Fil......
  • 使用 Selenium 导出链接时出现 NoSuchDriverException 错误
    我想设置一个脚本来从输入URL后生成的网站导出链接。相关网站是pagespeed.web.dev。我的知识为零,所以虽然我知道这不是最好的选择,但我还是向ChatGPT寻求帮助。看起来只用1个URL就可以很好地完成所有事情,但一旦我尝试做5个URL,它就崩溃了。注意:据我了解,我不是数据抓取,......