Selenium 点击和手动点击 return 个不同的当前 URL
Selenium click and manual click return different current URLs
我遇到了问题
我在 google https://www.google.com/search?q=sen%20do&uule=w+CAIQICIZSG8gQ2hpIE1pbmggQ2l0eSwgVmlldG5hbQ%3D%3D 上搜索了这个,然后手动点击了第一个结果(这个 link 附有广告),
我得到了当前的 url https://www.sendo.vn/?utm_source=google&utm_medium=affiliate&utm_campaign=333629566-13485316726&gclid=EAIaIQobChMI9eKR_YCh9AIVCz5gCh2ang22EAAYASAAEgI80_D_BwE
与上面的 link 相同,使用下面的代码但它只返回 https://www.sendo.vn/(缺少参数)
这是代码
driver.get("${the_above_google_search_url}")
// Find first result element
Web firstResultElement = driver.findElement(By.className("iUh30"))
firstResultElement.click()
String currentUrl = driver.getCurrentUrl()
有没有像手动点击一样使用 Selenium 获得完整 url 路径的解决方案?
我进入了您的网站并检查了页面,我发现在点击 google 搜索的第一个结果后,有两个重定向 (状态 302):
并且第二个重定向具有您在 header 位置 中查找的 url 因为是重定向 (302):
如果您等待,浏览器将执行第二次重定向并加载 url:
解决方案 1
Wait until the second redirect and then, get the url with the classic methods.
Web 是基于 React 开发的,这就是为什么使用 javascript 呈现的原因。这使 selenium 自动化有点复杂。
您需要搜索一个元素,该元素的存在表明您在第二次重定向后网络已准备就绪。我发现了这个:
document.querySelector('[aria-label="sendo logo"]');
将此 querySelector 翻译成 selenium:
By.cssSelector("a[aria-label='sendo logo']");
并且 wait 为:
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("a[aria-label='sendo logo']")));
如果在此元素之后,您一直得到相同的 url 而不是完整的 url,只需尝试另一个 html 元素。
解决方案 2
Try to get the headers of the page using selenium
我遇到了问题
我在 google https://www.google.com/search?q=sen%20do&uule=w+CAIQICIZSG8gQ2hpIE1pbmggQ2l0eSwgVmlldG5hbQ%3D%3D 上搜索了这个,然后手动点击了第一个结果(这个 link 附有广告), 我得到了当前的 url https://www.sendo.vn/?utm_source=google&utm_medium=affiliate&utm_campaign=333629566-13485316726&gclid=EAIaIQobChMI9eKR_YCh9AIVCz5gCh2ang22EAAYASAAEgI80_D_BwE
与上面的 link 相同,使用下面的代码但它只返回 https://www.sendo.vn/(缺少参数)
这是代码
driver.get("${the_above_google_search_url}")
// Find first result element
Web firstResultElement = driver.findElement(By.className("iUh30"))
firstResultElement.click()
String currentUrl = driver.getCurrentUrl()
有没有像手动点击一样使用 Selenium 获得完整 url 路径的解决方案?
我进入了您的网站并检查了页面,我发现在点击 google 搜索的第一个结果后,有两个重定向 (状态 302):
并且第二个重定向具有您在 header 位置 中查找的 url 因为是重定向 (302):
如果您等待,浏览器将执行第二次重定向并加载 url:
解决方案 1
Wait until the second redirect and then, get the url with the classic methods.
Web 是基于 React 开发的,这就是为什么使用 javascript 呈现的原因。这使 selenium 自动化有点复杂。
您需要搜索一个元素,该元素的存在表明您在第二次重定向后网络已准备就绪。我发现了这个:
document.querySelector('[aria-label="sendo logo"]');
将此 querySelector 翻译成 selenium:
By.cssSelector("a[aria-label='sendo logo']");
并且 wait 为:
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("a[aria-label='sendo logo']")));
如果在此元素之后,您一直得到相同的 url 而不是完整的 url,只需尝试另一个 html 元素。
解决方案 2
Try to get the headers of the page using selenium