1、闪退问题:由于缺少浏览器对应驱动。谷歌:chromedriver驱动;火狐:geckodriver驱动
火狐驱动下载时需注意:先查看自己安装浏览器版本,在驱动官方下载对应版本
驱动下载完成后,需放在python安装目录下的Scripts文件下,后重启项目,部分电脑需重启电脑。
2、找不到元素分为几种状况:(1)缺少驱动;(2)页面嵌套;(3)页面元素未加载;(4)页面元素存在动态加载等几种情况
? ? ? ? (1)缺少驱动:根据上述1、下载驱动,即可。
? ? ? ? (2)页面嵌套:查看元素所属标签上方是否存在iframe标签,或者新的<html>、<body>等标签,如存在,就需使用先进入新页面再查找元素。
? ? ? ? (3)页面元素未加载:出现这个问题是由于页面存在异步加载的情况,在网页上,页面已经展示出来,但实际元素,还未加载完成,就去查找元素进行操作,就会造成元素未找到,进而保持错,那么如何避免这种情况呢,那就是等待,强制等待或者隐式等待,等待元素加载完成
? ? ? ? 强制等待:time.sleep(等待时间)
? ? ? ? 隐式等待:如果强制等待时间过长,可选择隐式等待,隐式等待是自己设定的一个大概时间,如果元素在该时间内加载完成,则继续往下走,如果未加载完成,则报错或抛出自己设定的异常信息,下边的例子,设定时间为10秒。
#隐式等待所需导入库
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
curpath = os.path.dirname(os.path.realpath(__file__))
cfgpth = os.path.join(curpath, "C:/Users/Admnistrater/PycharmProjects/pythonProject/pz.ini")
conf = configparser.ConfigParser()
conf.read(cfgpth, encoding="utf-8")
divs = int(conf.get("PZ", "divs"))
driver = webdriver.Firefox()
#隐式等待
local = (By.ID, "username")
WebDriverWait(driver, 10).until(EC.presence_of_element_located(local))
driver.find_element_by_id("username").send_keys(conf.get("PZ", "username"))
|