Java 您可以使用cookie绕过Selenium WebDriver中的403代码吗?
我使用Java 您可以使用cookie绕过Selenium WebDriver中的403代码吗?,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我使用WebDriver通过imgHtml元素的src属性访问url字符串。然而,当我试图打开一个指向该URL的新窗口时,我得到了一个403未经授权的访问,我不知道如何克服它。我在这里读过很多关于stackoverflow的帖子,但我看到的最有希望的解决方案是在URLConnection中指定User-agent首选项,但没有效果。以下是我目前的代码: WebDriver driver = new ChromeDriver(); String urlSel
WebDriver
通过img
Html元素的src
属性访问url
字符串。然而,当我试图打开一个指向该URL的新窗口时,我得到了一个403未经授权的访问,我不知道如何克服它。我在这里读过很多关于stackoverflow的帖子,但我看到的最有希望的解决方案是在URLConnection
中指定User-agent
首选项,但没有效果。以下是我目前的代码:
WebDriver driver = new ChromeDriver();
String urlSelector = "body > div.overlay > div#cards"+cardID + " > div.one.card > img.core.load.bg.on";
WebElement urlElem = driver.findElement(By.cssSelector(urlSelector));
String url = urlElem.getAttribute("src");
driver.get(url);
编辑:
我在另一篇帖子上读到,我可能需要将某些cookie传递给URLConnection
,以避免403
响应代码,并对自己进行身份验证。因此,我检查了我在网站上时出现的cookies(使用WebDriver
),结果如下所示:
但是,如果我在普通浏览器上打开同一个网站(不使用WebDriver
),我会得到一些额外的imgur
cookies,如下所示:
据我所知,当我点击图片链接时,网站会使用Imgur来显示图片。在正常浏览器中单击图像链接后,我还决定检查imgur上的cookies,我得到了2个cookies,它们似乎与数据库有关(?):
就您所知,这些cookie中是否有一个用于验证我的身份,是否有方法使用myURLConnection
中的cookie来避免出现403
响应代码
附言:有问题的网站是这个试试看(还没有测试过):
该网站可能会阻止深度链接,这可能与推荐人有关。。。值得注意的是,在浏览器中打开图像将使您没有可操作的DOM。。。(Selenium将无法使用它…)为什么要尝试导航到资源?@pcalkins您好,谢谢您的回答。我真的想下载它。。。你已经下载了。。。但是不知道如何通过代码访问缓存的资源。我下载了url,对吗?不是图像本身?我还尝试了另一种方法,通过web驱动程序在该url处打开该图像的上下文菜单,但我始终需要在打开的系统对话框中单击“保存”。我能移除并自动化那个系统部分吗?我做不到,但我可能会在稍后解决一些问题。。。如果我找到了解决方案,我会发布一个答案。我对img=document.createElement()
字符串有点迷茫。它的字符串在哪里结束,为了访问属性/方法而创建的img
对象在哪里,您正在使用的img
实例是什么?它只是一个标记。它被附加到body标签上,因此它应该显示在底部。(根据当前页面的结构,您可能希望将其附加到另一个标记…和/或设置z顺序)
WebDriver driver = new ChromeDriver();
String urlSelector = "body > div.overlay > div#cards"+cardID + " > div.one.card > img.core.load.bg.on";
WebElement urlElem = driver.findElement(By.cssSelector(urlSelector));
String url = urlElem.getAttribute("src");
((JavascriptExecutor)driver).executeScript("img = document.createElement('img');
img.src = '"+ url + "'; img.id='forscreenshot'; document.body.appendChild(img);");
WebDriverWait wait = new WebDriverWait(driver,5);
WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(By.id('forscreenshot')));
File screenshot = element.getScreenshotAs(OutputType.FILE);