【问题标题】:How can I parse the site after the site loaded the javascript?网站加载 javascript 后如何解析网站?
【发布时间】:2019-06-06 21:11:53
【问题描述】:

我想在加载 javascript 后显示网页 HTML,以便获得表格的准确表示。

我尝试过使用其他 jar,但似乎只有这个对我有用,因为其余的看起来已经过时了。

System.setProperty("webdriver.chrome.driver", "D:\\Download bestanden\\chromedriver_win32\\chromedriver.exe");

    ChromeOptions options = new ChromeOptions();
    //options.addArguments("headless");
    WebDriver driver = new ChromeDriver(options);

    driver.get("https://www.flashscore.com/");
    System.out.println(driver.getTitle());

    Document doc = Jsoup.parse(driver.getPageSource());
    System.out.println(doc.select("ul.submenu.hidden li a").text());
    driver.close();
    driver.quit();
    System.out.println("Completed");

如果我搜索 lmenu_17,我希望得到比阿尔巴尼亚的 Superlinga 更多的结果作为 href,我希望甲级阿尔巴尼亚杯和超级杯能够像在检查器中一样显示。 提前感谢您的任何帮助!

【问题讨论】:

    标签: javascript java selenium-webdriver selenium-chromedriver jsoup


    【解决方案1】:
            ChromeDriver driver = new ChromeDriver();
            driver.Navigate().GoToUrl("https://www.flashscore.com/");
    
            //works after the page is fully loaded.
            //goes to a bottom line.
    
            string href = driver.FindElementByXPath("//*[@id='lmenu_17']/ul/li[1]/a").GetAttribute("href"); // albanian link
            //driver.Navigate().GoToUrl(href);
    
            foreach (var element in driver.FindElements(By.XPath("//*[@id='lc']/div[6]/ul/li/a")))
            {
                Console.WriteLine(element.GetAttribute("href"));
            }
    
            driver.FindElementByXPath("//*[@id='lc']/div[6]/ul/li[12]/a").Click();
            Thread.Sleep(1000);
    
            foreach (var element in driver.FindElements(By.XPath("//*[@id='lc']/div[9]/ul/li/a")))
            {
                Console.WriteLine(element.GetAttribute("href"));
            }
    
            Console.ReadKey();
    

    您不需要获取页面源代码。

    picture of working 我不知道它是否会有所帮助。如果我能提供帮助,我会很高兴。

    【讨论】:

    • 非常感谢!多亏了你我解决了它,问题不是页面 HTML 在加载 JavaScript 后发生了变化,而是在你单击一个元素后它发生了变化,所以我让它单击我想要的元素,然后将 HTML 解析为 Jsoup 以便我仍然可以使用 Jsoup 语法。如果有人感兴趣,这里是代码。
    • System.setProperty("webdriver.chrome.driver", "D:\\Download bestanden\\chromedriver_win32\\chromedriver.exe"); ChromeDriver 驱动程序 = 新的 ChromeDriver(); driver.navigate().to("<a href="/default/index/tourl?u=aHR0cHM6Ly93d3cuZmxhc2hzY29yZS5jb20vJTIy" rel="nofollow" target="_blank">flashscore.com/"</a>); WebElement element = driver.findElement(By.xpath("//*[@id='lmenu_17']/a")); JavascriptExecutor executor = (JavascriptExecutor)driver ; executor.executeScript("arguments[0].click();", element); try {Thread.sleep(1000);} catch (InterruptedException e) {e.} Document doc = Jsoup.parse(driver.getPageSource( ));
    猜你喜欢
    • 1970-01-01
    • 2011-02-08
    • 2017-08-02
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 2015-10-05
    • 1970-01-01
    相关资源
    最近更新 更多