0

这是我编写的代码。我尝试添加thread.sleep()但它仍然不起作用也尝试使用 chromedriver 但结果相同

package com.thinksys.frames;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class Iframes 
{
    public static void main(String[] args) 
    {
        System.setProperty("webdriver.gecko.driver","C:\\Users\\thinksysuser\\Downloads\\geckodriver-v0.18.0-win64\\geckodriver.exe");

        WebDriver driver = new FirefoxDriver();
        driver.get("https://www.irctc.co.in/eticketing/loginHome.jsf");

        WebElement e = driver.findElement(By.id("google_ads_iframe_/37179215/DFP_NGET_01_HomePage_RHS_ATF_479x266_ENG_0"));

        driver.switchTo().frame(e);

        driver.findElement(By.xpath(".//*[@id='image-11']/a/img")).click();
    }
}
4

2 回答 2

1

它可能是由<ifram>id 中的特殊字符引起的。使用部分 id 将提供两个匹配项,因此我建议您使用 name 属性的两个部分

WebElement frame = driver.findElement(By.cssSelector("[name*='google_ads_iframe'][name*='DFP_NGET_01_HomePage_RHS']"));
driver.switchTo().frame(frame);

编辑

图像旋转,每个图像仅显示几秒钟。要单击特定图像,您需要等待它可见。您可以使用显式等待它

WebDriverWait wait = new WebDriverWait(driver, 60, 50);
wait.until(ExpectedConditions.visibilityOfElementLocatedBy.xpath(".//*[@id='image-11']/a/img"))).click();

这将每 100 毫秒对 DOM 进行一次极化,直到图像可见或时间到了(60 秒)。

于 2017-07-19T11:08:31.797 回答
0

显示广告的浏览器有所不同。我在 Firefox 中打开,但在 chrome 中显示时看不到广告。在我使用脚本打开 Chrome 或 Firefox 浏览器的情况下,没有广告部分。

基于这种情况,您可以检查天气框架是否可用(如果可用)然后切换到它并等待您要单击的图像可见然后单击它

您可以尝试这种方式:

WebDriverWait wait = new WebDriverWait(driver, 120);
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(driver.findElement(By.xpath("//iframe[starts-with(@id,'google_ads_iframe')][@title='3rd party ad content']"))));

wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//div[@id='image-11']/a/img")))).click();

或者

WebDriverWait wait = new WebDriverWait(driver, 120);
List <WebElement> adFrame = driver.findElements(By.xpath("//iframe[starts-with(@id,'google_ads_iframe')][@title='3rd party ad content']"))
   if(adFrame.size()>0)
    {
        driver.switchTo().frame(adFrame.get(0));
        wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//div[@id='image-11']/a/img")))).click();
    }
    else
    {
        System.out.println("Sorry there is no ads");
    }
于 2017-07-19T11:59:26.577 回答