【问题标题】:Extract Web Elements from an E-Commerce website?从电子商务网站中提取 Web 元素?
【发布时间】:2020-05-26 16:22:49
【问题描述】:

我正在尝试编写代码来访问 Aliexpress 并搜索商品,然后提取详细信息,例如产品名称、价格等;逐页复制到 Excel 文档。我寻求通过此处发布的先前问题来构建它。多亏了。

不知何故,我能够在前 5 或 6 次测试运行中搜索该项目,但突然间,Aliexpress 要求我登录或注册。

1.) 第一个问题,为什么任何浏览器不注册就无法访问网站?他们认出了我的用户代理吗?

2.) 其次,我写了一个自动登录的代码。网站包含很多 Javascript,它是一个响应式网站。当我们单击它们时,会出现一些 html 元素。在自动登录时,我的代码不会检测到页面的电子邮件或密码元素。有什么东西阻止它被检测到吗?我该如何解决这个问题?

我在这里放上我的示例代码:

public class Main {

public static void main(String[] args) throws IOException, InterruptedException {

    //To input the user's search
    Scanner nw1 = new Scanner(System.in);
    System.out.println("What do you want to search?");
    String a = nw1.nextLine();

    //Open the driver
    System.setProperty("webdriver.chrome.driver", 
    "E:\\JetBrains\\webdriver\\chrome\\chromedriver.exe");
    WebDriver AE = new ChromeDriver();

    //Open the web page and Login in.
    AE.get("https://www.aliexpress.com/");
    Thread.sleep(2000);

    //xpath of account button
    AE.findElement(By.xpath("//*[@id="nav-user-account"]/div/div/p[3]/a[2]")).click();

    //xpath of Sign in button
    AE.findElement(By.xpath("/html/body/div[9]/a")).click();
    AE.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

    //xpath of Email box 
    AE.findElement(By.xpath("//*[@id=\"fm-login-id\"]")).sendKeys("my-email");

    //xpath of password section to type  
    AE.findElement(By.xpath("//*[@id=\'fm-login-password\']")).sendKeys("my-password");
    AE.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

    // xpath of submit button
    AE.findElement(By.xpath("//*[@id="login-form"]/div[5]/button")).click()

抱歉,这是我第一次来这里。 欢迎任何有用的 cmets。谢谢。

【问题讨论】:

  • 你为什么不通过login.aliexpress.com登录?
  • @DebanjanB 是的,我可以。但我希望与我的几个朋友分享这段代码。所以我想在开始时输入登录详细信息。

标签: java selenium selenium-webdriver automation aliexpress


【解决方案1】:

这是因为遵循 x 路径而不是点击帐户按钮,而是点击登录按钮

AE.findElement(By.xpath("//*[@id="nav-user-account"]/div/div/p[3]/a[2]")).click();

通过id查找元素。 id可点击账号

"nav-user-account"

在点击的时候通过下面的类验证它是否展开

"ng-item nav-pinfo-item nav-user-account user-account-unfold"

如果展开包含,则框打开,否则关闭。如果关闭,请单击它。 先试试这个。

【讨论】:

  • 感谢您的回复。 “nav-user-account”工作正常,代码在点击登录按钮后也正常工作。在登录子窗口中输入详细信息时出现问题。无论我如何获取元素(css_selector 或 xpath 或 id 等)代码都不会检测到它。
【解决方案2】:
  1. 尝试应用删除cookie,一些站点从缓存/cookies中访问数据,清除它会解决。在脚本末尾退出驱动程序并打开一个新实例,即driver.manage().deleteAllCookies();和 driver.quit();
  2. 代码中的 xpath 需要更正为 AE.findElement(By.xpath("//*[@id='nav-user-account']/div/div/p[3]/a[2] “))。点击(); 在 xpath 中使用单引号。

【讨论】:

  • 通过添加双引号或单引号没有任何区别。两者都工作得很好。但问题是当登录窗口出现时,没有检测到该窗口上的任何元素?。
猜你喜欢
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多