[英]How to Collect all System.out.print(“”) results after running a test suite in TestNG (Selenium with 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.