为什么在这个网站上找不到任何元素?

时间:2018-12-29 13:30:14

标签: java selenium web selenium-webdriver

我正在尝试使用硒在输入框中输入数据。但是我无法获取任何元素(NoSuchElementException)。问题仅在于此site

我尝试按名称/ id搜索,但失败了。

WebDriver driver = new FirefoxDriver();        
driver.get("https://ekrs.ms.gov.pl/web/wyszukiwarka-krs/strona-glowna");
System.out.println(driver.getCurrentUrl());
System.out.println("Successfully opened the website");
WebElement wb = driver.findElement(By.id("rejestrPrzedsiebiorcy"));

(目前)我的目标只是获取此元素:P。

3 个答案:

答案 0 :(得分:3)

问题在于表单是通过<iframe>元素包含在源中的。您可以看到它具有属性src="https://ekrs.ms.gov.pl/krsrdf/krs/wyszukiwaniepodmiotu?"。如果您转到该链接,将看到独立表格。问题是-如何访问包含的源?这很简单;)

  1. 找到<iframe>元素:

    WebElement frame = driver.findElement(By.xpath("//div[@class='portlet-body']/div/iframe"))

  2. 切换到该帧:

    driver.switchTo().frame(frame)

就是这样!现在,您位于<iframe>元素上下文中,并且可以在其中进行搜索。所以现在可以使用:

WebElement wb = driver.findElement(By.id("rejestrPrzedsiebiorcy"));

要切换回(退出框架上下文),只需调用:

driver.switchTo().defaultContent();

请注意,此站点具有动态生成的ID以防止自动化,并使用CaptchaV3(您可以看到我使用xpath表达式来查找iframe)。如果不小心,很容易检测到硒。

答案 1 :(得分:1)

检查必需的元素后,请仔细观察HTML代码。如果您的元素位于<iframe>内,则需要先打开框,然后找到该元素。

下面是切换到框架的方法:

driver.switchTo().frame()方法采用三个可能的参数之一:

一个数字。

通过其(从零开始)索引选择帧。也就是说,如果一个页面具有三个框架,则第一个框架将位于索引0,第二个框架将位于索引1,第三个框架将位于索引2。一旦选择了框架,WebDriver接口上的所有后续调用都将对该框架进行

driver.switchTo().frame(0)

名称或ID。

通过其名称或ID选择框架。通过匹配名称属性定位的帧始终优先于通过ID匹配的帧。

driver.switchTo().frame("name here");

先前找到的WebElement。

使用其先前位于的WebElement选择框架。

    WebElement iframeElement = driver.findElement(By.id("IF1"));

    //now use the switch command
    driver.switchTo().frame(iframeElement);

答案 2 :(得分:0)

先尝试driver.findElement(By.id("rejestrPrzedsiebiorcy"));,然后再尝试 services.AddMvc() .SetCompatibilityVersion(CompatibilityVersion.Version_2_1) .AddJsonOptions(x=> { x.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented; });