未使用Selenium C#填充元素,并在Chrome中滚动页面

未使用Selenium C#填充元素,并在Chrome中滚动页面,c#,selenium,selenium-chromedriver,C#,Selenium,Selenium Chromedriver,我正在努力搜索的网站是 我试图通过访问以下html(以及其他硬币对的其他类似html),从页面中获取加密货币硬币对: **** 1.92% ₮ 59 843 794 ₮ 6780.73 ₮ 6486.82 ₮ 6833.25 我想从第一个标签获取文本,它应该给我“BTC/USDT”。我发现通过使用Selenium的Driver.FindElements()我只能得到前29个元素(即不进行任何滚动显示的元素)。因此,我尝试实现一个do-while循环来向下滚动页面,获取元素列表并将它们附加到主

我正在努力搜索的网站是

我试图通过访问以下html(以及其他硬币对的其他类似html),从页面中获取加密货币硬币对:


****
1.92%
₮ 59 843 794
₮ 6780.73
₮ 6486.82
₮ 6833.25
我想从第一个标签获取文本,它应该给我“BTC/USDT”。我发现通过使用Selenium的Driver.FindElements()我只能得到前29个元素(即不进行任何滚动显示的元素)。因此,我尝试实现一个do-while循环来向下滚动页面,获取元素列表并将它们附加到主列表中,直到先前获取的列表与当前列表相同(到达页面底部)。这是我的密码:

List<IWebElement> totalElemList = new List<IWebElement>();
List<IWebElement> elementList = new List<IWebElement>();
List<IWebElement> prevList = new List<IWebElement>();

do
{
    prevList.Clear();
    prevList.AddRange(elementList);
    totalElemList.AddRange(prevList);
    var infoList = RetryingFind(By.ClassName("ReactVirtualized__Table__row"));
    foreach (var element in infoList)
    {
        elementList.Add(element.FindElement(By.TagName("a")));
    }
    Thread.Sleep(10000);
    ((IJavaScriptExecutor)Browser.Driver).ExecuteScript("arguments[0].scrollIntoView(true);", elementList[elementList.Count - 1]);
}
while (prevList != elementList);
List totalElemList=new List();
List elementList=新列表();
List prevList=新列表();
做
{
prevList.Clear();
prevList.AddRange(elementList);
totalElemList.AddRange(prevList);
var infoList=RetryingFind(按.ClassName(“ReactVirtualized__表__行”);
foreach(infoList中的var元素)
{
elementList.Add(element.FindElement(按.TagName(“a”));
}
睡眠(10000);
((IJavaScriptExecutor)Browser.Driver).ExecuteScript(“参数[0].ScrollingToView(true);”,elementList[elementList.Count-1]);
}
while(prevList!=elementList);
但是,由于某些原因,elementList没有填充任何元素。我添加了Thread.Sleep()尝试不同的睡眠时间长达10秒,但它没有解决问题。然后ExecuteScript()行失败,因为它试图访问elementList的索引-1,因为它的计数为0


我很难理解为什么我以前能够用页面上的至少一些元素填充元素列表,但是当我使用do-while循环时,我什么也得不到。有什么想法吗

理想情况下,它应该与scroll一起使用。检查滚动时是否触发任何作业事件。如果是这样,请尝试从IJavaScripExecutor调用该函数。这也会给你加载元素。

你能用这个Xpath代替类名-
//*[@id='app']/div/div[2]/div/div/div
给我一个标记类型为anchor和text=“立即开始交易”的元素吗
List<IWebElement> totalElemList = new List<IWebElement>();
List<IWebElement> elementList = new List<IWebElement>();
List<IWebElement> prevList = new List<IWebElement>();

do
{
    prevList.Clear();
    prevList.AddRange(elementList);
    totalElemList.AddRange(prevList);
    var infoList = RetryingFind(By.ClassName("ReactVirtualized__Table__row"));
    foreach (var element in infoList)
    {
        elementList.Add(element.FindElement(By.TagName("a")));
    }
    Thread.Sleep(10000);
    ((IJavaScriptExecutor)Browser.Driver).ExecuteScript("arguments[0].scrollIntoView(true);", elementList[elementList.Count - 1]);
}
while (prevList != elementList);