【问题标题】:Not able to locate element when running chrome in headless mode在无头模式下运行 chrome 时无法定位元素
【发布时间】:2019-06-12 13:13:01
【问题描述】:

@DebanjanB - 你好。我已经使用 selenium chrome 驱动程序自动下载网站。但是,当我在无头模式下运行 chrome 时,它​​无法找到要单击以下载文件的复选框。你能帮我解决这个问题吗?

下面是我的代码:

import org.openqa.selenium.chrome.ChromeOptions
import org.openqa.selenium.chrome.ChromeDriver
import org.openqa.selenium.By
import scala.collection.mutable.HashMap

object selen extends App{

  val chromeOptions = new ChromeOptions()
  chromeOptions.addArguments("--headless")
  new ChromeDriver(chromeOptions)
  val driver = new ChromeDriver(chromeOptions)

  driver.get("url")

  driver.findElement(By.id("isc_S")).sendKeys("Username")
  driver.findElement(By.id("isc_V")).sendKeys("Password")
  driver.findElement(By.id("isc_Z")).click
  println("Logged in")

  driver.manage.window.maximize
  Thread.sleep(5000);

  driver.findElement(By.cssSelector("#isc_36 > table > tbody > tr > td")).click()
  println("clicked Dashboard")
  Thread.sleep(5000);

  var count = 1

  for (i <- 1 to 9) {
    for (j <- 1 to 5) {
      driver.findElement(By.xpath("//*[@id=\"isc_5Ptable\"]/tbody/tr[" + count + "]/td[1]/div/span")).click()
      driver.findElement(By.id("isc_64")).click()
      Thread.sleep(4000)
      driver.findElement(By.xpath("//*[@id=\"isc_5Ptable\"]/tbody/tr[" + count + "]/td[1]/div/span")).click()
      count+=1
    }

    var count2 = 10
    while(count2 > 0)
    {
      driver.findElement(By.xpath("//*[@id=\"isc_5Q\"]/img[3]")).click()
      count2 -= 1
    }
  }
  driver.close()
}

以下是未位于无头 chrome 驱动程序中的复选框的 html:

span style="display:inline-block;background-size:100% 100%;background-image:url("https://ford-ddlive.clifford-thames.com/datadistribution/sc/skins/ford/images/DynamicForm/unchecked.png");width:13px;height:13px;vertical-align:text-top;margin-left:2px;margin-right:2px" eventpart="valueicon">

【问题讨论】:

  • @MateMrše - 我已经更新了。
  • @AnandNautiyal 只有&lt;span&gt; 可能还不够,您需要使用更多的outerHTML 来解决问题。

标签: scala selenium selenium-webdriver selenium-chromedriver


【解决方案1】:

考虑使用显式等待 (FluentWait) 代替 sleep() 和 findElement()

【讨论】:

  • FluentWait 看起来很合适,但 documentation 说明使用它 with findElement 而不是 而不是 它。包括您的意思的代码示例会有所帮助。
  • 对,FluentWait 就像 while(timeout || elementIsFound) { findElement()}。如果没有立即找到元素,它会稍等片刻并重复 findElement() 几次。
【解决方案2】:

也许您的元素不在视口中,因为 headless chrome 的分辨率可能与您的正常工作区不同。

因此,请尝试通过在 chromeOptions.addArguments("--headless") 行之后添加 chromeOptions.addArguments("--start-maximised") 来最大化无头 chrome。

【讨论】:

    猜你喜欢
    • 2018-01-19
    • 1970-01-01
    • 2018-08-12
    • 2023-01-22
    • 2018-04-29
    • 2019-08-12
    • 1970-01-01
    • 2021-07-11
    相关资源
    最近更新 更多