在Java中使用Selenium登录到hot或not并获取照片

在Java中使用Selenium登录到hot或not并获取照片,java,selenium,Java,Selenium,我正在尝试制作一个程序bot,它使用java中的Selenium登录 我想使用网页上的“使用电子邮件登录”选项登录-将鼠标悬停在带有文本或文本的按钮上,然后会出现一组下拉选项,其中包含“使用邮件登录”选项,单击此选项后,会出现一个对话框,您可以在其中输入其详细信息。签出网站会使其更加清晰。虽然我通常知道如何在文本框中输入文本,但我在如何打开此对话框并使用selenium输入数据方面遇到了问题 我的目的是下载用户图片,我想我可以自己解决这一部分,并将这些数据用于机器学习项目——除了吸引力评级之外,

我正在尝试制作一个程序bot,它使用java中的Selenium登录

我想使用网页上的“使用电子邮件登录”选项登录-将鼠标悬停在带有文本或文本的按钮上,然后会出现一组下拉选项,其中包含“使用邮件登录”选项,单击此选项后,会出现一个对话框,您可以在其中输入其详细信息。签出网站会使其更加清晰。虽然我通常知道如何在文本框中输入文本,但我在如何打开此对话框并使用selenium输入数据方面遇到了问题

我的目的是下载用户图片,我想我可以自己解决这一部分,并将这些数据用于机器学习项目——除了吸引力评级之外,许多可用的图片库都没有我需要的规格

任何帮助都将不胜感激

谢谢


Tom

确保您阅读了《高温或非高温使用条件规定》。我想说你需要使用无头浏览器来进行这种屏幕抓取。研究使用Java语言编写测试代码的方法。您也可以使用标准Firefox webdriver进行无头操作,但速度会稍微慢一点。这取决于你在做什么。使用Jenkins计划作业。

记住在确认作业有效后,单击帖子左侧的复选框,将其标记为接受答案

public class Main {

    static WebDriver driver = new FirefoxDriver();

    public static void main(String[] args) {
        hotOrNotLogin("emailAddress", "password");
    }

    public static void hotOrNotLogin(String emailAddress, String password) {

        final String OR_SPINNTER_CLASSNAME = "dropdown-link";
        final String SIGNUP_BY_EMAIL_CLASSNAME = "a.js-ovl-open.b-link";
        final String EMAIL_INPUT_NAME = "email";
        final String PASSWORD_INPUT_NAME = "password";
        WebDriverWait wait = new WebDriverWait(driver, 8);

        driver.get("http://hotornot.com/");

        //move cursor to the Or spinner to reveal the drop-down
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.className(OR_SPINNTER_CLASSNAME)));
        WebElement orSpinner = driver.findElement(By.className(OR_SPINNTER_CLASSNAME));
        Actions actions = new Actions(driver);
        actions.moveToElement(orSpinner);
        actions.perform();

        //sign in with email
        driver.findElement(By.cssSelector(SIGNUP_BY_EMAIL_CLASSNAME)).click();
        driver.findElement(By.name(EMAIL_INPUT_NAME)).sendKeys(emailAddress);
        driver.findElement(By.name(PASSWORD_INPUT_NAME)).sendKeys(password + Keys.RETURN);

    }
}
我不得不在//sign-in with-email中添加一些wait.untils,以使其与HtmlUnitDriver一起工作。您可能需要根据您的计算机和连接速度来调整时间


也欢迎来到StackOverflow

在第2步之前,通过隐式等待尝试类似的操作。如果有效,让我知道,这样我可以写一个正式的答案。我目前无法亲自尝试,因此可能无法:1 driver.findElementBy.css选择或btn btn lg btn white btn more下拉链接。单击;2 driver.findElementBy.cssSelectora.js-ovl-open.b-link.click;谢谢你的代码;我试过了,但不幸的是第一行给了我:org.openqa.selenium.NoSuchElementException:返回的节点不是HTML元素。然而,当我单独使用第二行时,我没有得到任何错误,但我尝试执行:driver.findElementBy.namemail。sendKeysemailaddress@eg.com;, 这给了我同样的错误@Jane Goodalli如果我没有弄错,现在你可以取消释放或微调器,单击或将鼠标悬停在“使用电子邮件登录”上,打开“登录”弹出窗口,但你不能将弹出窗口发送到你的密钥?你能将你的代码粘贴到pastebin并在这里发布链接吗?当然:。如果我正确理解您给我的代码,因为第一行不起作用,但第二行起作用,似乎我可以单击您给我的电子邮件按钮2,而无需松开或旋转器,但是仅仅在邮件地址文本框之后使用sendKeys是不起作用的。测试人员注意:您应该遵循标准的OOP和TDD原则。将驱动程序代码保存在/src/main中,将JUnit代码保存在/src/test中,等等。我特意在主过程中编写了这些代码,这样提问者就可以看到Selenium在做什么,而不必考虑好的编码约定。出于同样的原因,我也很少链接方法。没问题@user3165713!顺便说一下,我建议在编写更多代码时查找错误消息。有时它们是不清楚的,例如,当试图通过多个类名查找元素时产生的。如果一个元素的class=foo-bar,By.classNamefoo在Selenium中工作,但是By.classNamefoo-bar不工作,因为By.className只能接受一个类,但是foo-bar是两个由空格分隔的类。我尝试过-我认为在这种情况下,更多的问题是不清楚我在做什么或者如何通过某些引用查找元素。使用你的代码和摆弄Firefox,我已经找到了如何找到我需要的名字,并用代码选择它们,例如a.js-…,所以我几乎完成了图像/分数获取程序:使用你的用户将使用的实际浏览器以外的东西的测试不是无效的吗?