【发布时间】:2019-05-06 17:34:55
【问题描述】:
我被分配了一个项目,该项目要求我从用户那里获取输入,从网站上抓取该输入并将其存储在数据库中,然后根据后续请求,使用机器学习重新排列保存在数据库中的所有数据,根据用户过去的行为为用户提供选择。
我要抓取的网站是 TripAdvisor.it。
我目前正在研究网络抓取部分,特别是,我正在通过从页面获取景点列表来填充我的数据库,然后分别单击它们中的每一个,这样我就可以保存与每个景点。
我经常收到错误“未知错误:元素在点 (x,y) 处不可点击;...”
我认为这可能是javascript没有完全加载到tripadvisor页面上的问题,所以我在stackoverflow上调查了各种可能性并尝试添加显式等待,但它不起作用。 我尝试过的其他事情:
- Thread.sleep(1000);我知道使用它不是一个好习惯,尤其是在 for 循环中,我只是想强制程序等待,但它没有用。我实际上用了 3000 毫秒。
- 一种检查 js 是否已完全加载到网页上的方法(我改编了我在 stackExchange 上找到的一些代码,因为我对 javascript 不是很了解)。这给出了超时错误,我不太确定这意味着什么。
- 使用 ExpectedCondition
.visibilityOf(WebElement elem);而不是.elementToBeClickable(WebElement elem);,因为我意识到.getNumberOfElementsFound(driver, locator)方法实际上可以找到页面上的所有 30 个元素。我仍然收到相同的错误“元素无法位于 (x,y)...”
下面是抛出异常的代码:
...
By locator = By.xpath("//a[contains(@class, 'attractions-attraction-overview-main-TopPOIs__name')]");
int numberOfElementsFound = getNumberOfElementsFound(driver, locator);
for (int pos = 0; pos < numberOfElementsFound; pos++) {
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(getElementWithIndex(driver, locator, pos))).click();
...
}
这是错误的完整信息:
org.openqa.selenium.WebDriverException:未知错误:元素 ... 在点 (360, 14) 处不可点击。其他元素会收到点击:...
Here 是我正在处理的实际网页的链接,如果有帮助的话。
我的评估是否正确,javascript 是这里的罪魁祸首?我的结论可能是这样,因为当我在实际页面上搜索该标签“ui_column wrap_column responsive_inline_hidden label_column”时,我找不到它。
我应该怎么做才能修复这个错误?
【问题讨论】:
标签: javascript java google-chrome selenium-webdriver