项目概况:需要逐条审核7万+的数据,非常的机械性,但是平台不提供批处理功能,只能人工一个个去点。符合平台内置条件的就提示通过,不符合的你点通过就会弹出不通过的原因,这时候就需要退回,并且必须要附上退回的理由。
在这个项目过程中碰到的问题:
1、无头模式(headless)无法定位,在有头模式(有界面)下是可以正常定位的,后来找了半天的,原因,用最大化窗口也搞不定,最后是最大化并且把窗口大小设置成电脑分辨率大小才搞定。

# 最大化窗口
driver.maximize_window()
# 设置为本台电脑最大的分辨率,不然有头模式能运行,无头模式将无法运行。
driver.set_window_rect(x=0, y=0, width=1920, height=1080)

2、碰到网页网址变化的情况,无法定位,这个时候需要切换窗口即可

# 切换窗口函数
def switch(driver):
    # 获得打开的第一个窗口句柄
    window_1 = driver.current_window_handle
    # 获得打开的所有的窗口句柄
    windows = driver.window_handles
    # 切换到最新的窗口
    for current_window in windows:
        if current_window != window_1:
            driver.switch_to.window(current_window)

3、出现元素不可操作的情况,此时使用try/except让脚本跳过这个页面即可,不然会卡死报错。
4、当在无头模式下出现无法定位,有界面又可以定位的情况,因为无法知道无头模式下页面的样子,这是就可以用界面功能把当时的页面保存下来看,方便对照检查。

#运行过程中进行截图,支持无界面模式,文件自动保存在工程目录下
driver.save_screenshot('screenshot.png')

5、浏览器自带的右键可以复制Xpath相对路径和绝对路径,真的很好用,直接复制粘贴就能用。当然,要素出现要素在框架frame内就需要先切入。但是也带来一个很大的烦恼,就是绝对路径很长,相对路径也不短,导致脚本很夸张,可读性降低。其实用Xpath里的ID,name之类的属性值,或者contains(包含)等有是很简便的定位方法。

driver.find_element(By.XPATH, '//*[@placeholder="请输入手机号"]').send_keys('123456789')
driver.find_element(By.XPATH, './/span[contains(text(),"待本级审核")]').click()
driver.find_element(By.XPATH,'//span[text()="下一个"]').click()

6、等待的利用,有时候显式等待好用,有时候强制等待好用,隐形等待是全局的不好控制。

#显式等待
WebDriverWait(driver, 10,0.2).until(EC.visibility_of_element_located((By.XPATH, '//span[contains(.,"审核通过")]')))

7、写好的定位现在控制台测试能定位到唯一的元素后再拿到脚本中去运行,能节省时间。

selenium java 无头浏览器 selenium无头模式报错_selenium java 无头浏览器