关于Element button could not be scrolled into view问题

Selunium爬取网页 网页部分源代码

<h1 data-v-6cb98ece="" class="title">登录</h1>
<div data-v-6cb98ece="" class="input-group">
<div data-v-6cb98ece="" class="input-box">
<input data-v-6cb98ece="" name="loginPhoneOrEmail" maxlength="64" placeholder="请填写手机号或邮箱" class="input">
</div>
<div data-v-6cb98ece="" class="input-box"><input data-v-6cb98ece="" name="loginPassword" maxlength="64" placeholder="请输入密码" class="input" type="password">
</div>
</div>
<button data-v-6cb98ece="" class="btn">登录</button>
<div data-v-6cb98ece="" class="prompt-box">没有账号?
 <span data-v-6cb98ece="" class="clickable">注册</span>
<a data-v-6cb98ece="" href="/reset-password" class="right clickable">忘记密码</a>
</div>

爬取Java源代码

System.setProperty("webdriver.gecko.driver",driverPath);
 WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
driver.get("https://www.juejin.im");                          
driver.findElement(By.className("login")).click();                          
driver.findElement(By.tagName("input")).sendKeys("xxx");  
driver.findElement(By.name("loginPassword")).sendKeys("xxx");
/*WebDriverWait wait=new WebDriverWait(driver,5);
wait.until(ExpectedConditions.visibilityOf(e));
e.click();*/
//JavascriptExecutor js = (JavascriptExecutor)driver;
//js.executeScript("arguments[0].click();", e);
WebElement e=driver.findElement(By.cssSelector("button.btn"));
e.click();

通过对原网页的分析,这个登陆表单是由js生成的
WebElement e=driver.findElement(By.cssSelector(“button.btn”));
网页上同为button.btn的匹配项没有找到,所以可能是父级元素导致的不可见,所以需要加上父级元素查找元素
更改成
WebElement e=driver.findElement(By.cssSelector(“div.panel button.btn”));
解决异常

还有其他同类异常的解决方法 ,https://stackoverflow.com/questions/3401343/scroll-element-into-view-with-selenium,但无法解决爬取这个网页的问题

另一个同样异常的网页解析

             driver.get("http://www.qq.com/");//获取一个链接的网页元素
             driver.findElement(By.className("login")).click();
            //点击事件 可能存在cannot Scrolled into View 或 cannot locate element异常

            //可以通过添加父元素 切换iframe 点击父元素以获得焦点的方法

            //对于js未载入完全,可以通过等待或自执行js的方法
             WebElement element=driver.findElement(By.id("ui_ptlogin"));
            //关于弹出iframe内嵌窗口的问题解决方案
             driver.switchTo().frame(element);

             //极易发生以上错误
             WebElement e=driver.findElement(By.cssSelector("div#login div#bottom_qlogin a#switcher_plogin"));
             WebDriverWait wait=new WebDriverWait(driver,5);
             wait.until(ExpectedConditions.visibilityOf(e));
             e.click();

这个网页的登陆表单是iframe内嵌的

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子的木木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值