簡體   English   中英

如何使用Selenium和Java加載和收集所有注釋

[英]How to load and collect all comments with Selenium and Java

我有一個Java應用程序,該應用程序正在使用Selenium Web驅動程序從Google Play商店應用程序中抓取/抓取信息。 我有來自應用程序的大約30個鏈接,我在從每個應用程序收集所有評論時遇到問題。 例如, 應用程序需要大量滾動才能加載所有注釋,而其他一些應用程序則需要更少/更多的滾動。 如何動態加載每個應用程序的所有評論?

由於您尚未共享示例代碼,因此我將共享javascript代碼段,然后提供一個C#實現,可在您的Java Selenium項目的引用中使用。

示例JavaScript代碼

let i=0;
var element = document.querySelectorAll("div>span[jsname='bN97Pc']")[i];
var timer = setInterval(function()
{
    console.log(element);
    element.scrollIntoView();

        i++;
        element = document.querySelectorAll("div>span[jsname='bN97Pc']")[i];
        if(element===undefined)
            clearTimeout(timer);

},500);

在帶有共享注釋的應用程序頁面上在控制台上運行以上代碼后,在控制台上打印每個注釋時,滾動到頁面末尾。

具有Selenium C#綁定的示例代碼:

static void Main(string[] args)
        {
            ChromeDriver driver = new ChromeDriver();
            driver.Navigate().GoToUrl("https://play.google.com/store/apps/details?id=com.plokia.ClassUp&hl=en&showAllReviews=true");

            ExtractComments(driver);
            driver.Quit();
        }

        private static void ExtractComments(ChromeDriver driver,int startingIndex=0)
        {
            IEnumerable<IWebElement> comments = driver.FindElementsByCssSelector(@"div>span[jsname='bN97Pc']");

            if (comments.Count() <= startingIndex)
                return; //no more new comments hence return.

            if (startingIndex > 0)
                comments = comments.Skip(startingIndex); //skip already processed elements


            //process located comments
            foreach (var comment in comments)
            {
                string commentText = comment.Text;
                Console.WriteLine(commentText);
                (driver as IJavaScriptExecutor).ExecuteScript("arguments[0].scrollIntoView()", comment);
                Thread.Sleep(250);
                startingIndex++;
            }

            Thread.Sleep(2000); // Let more comments load once we have consumed existing
            ExtractComments(driver,startingIndex); //Recursively call self to process any further comments that have been loaded after scrolling
        }

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM