硒卷轴

2024-04-20 13:35:48 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我能找到的唯一一个可以向下滚动到页面末尾的代码,其他代码都不起作用。问题是whiletrue语句永远不会完成,它会继续尝试向下滚动,即使在它到达底部之后,也不会继续进行下一步的打印。如何结束whiletrue语句并打印结果?谢谢

 from selenium import webdriver

    url = 'http://www.tradingview.com/screener'
    driver = webdriver.Firefox()
    driver.get(url)

    # Get scroll height
    last_height = driver.execute_script("return document.body.scrollHeight")

    while True:
        # Scroll down to bottom
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

    # will give a list of all tickers
    tickers = driver.find_elements_by_css_selector('a.tv-screener__symbol') 

    for index in range(len(tickers)):
       print("Row " + tickers[index].text + " ") 

^{pr2}$

Tags: 代码urlexecuteindexdriverscriptbody语句
1条回答
网友
1楼 · 发布于 2024-04-20 13:35:48

在ticker下,它告诉您表中有多少行(匹配项)。因此,一种选择是将可见行数与行总数进行比较。当达到该数量(可见行数)时,退出循环。在

url = 'http://www.tradingview.com/screener'
driver = webdriver.Firefox()
driver.get(url)

# Get scroll height
last_height = driver.execute_script("return document.body.scrollHeight")

selector = '.js-field-total.tv-screener-table__field-value total'
matches = driver.find_element_by_css_selector(selector)
matches = int(matches.text.split()[0])

visible_rows = 0
scrolls = 0

while visible_rows < matches:

    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

    # Wait 10 scrolls before updating row information 
    if scrolls == 10:
        table = driver.find_elements_by_class_name('tv-data-table__tbody')
        visible_rows = len(table[1].find_elements_by_tag_name('tr'))
        scrolls = 0

    scrolls += 1

# will give a list of all tickers
tickers = driver.find_elements_by_css_selector('a.tv-screener__symbol') 

for index in range(len(tickers)):
   print("Row " + tickers[index].text + " ") 

编辑:由于您的设置似乎不允许以前的解决方案,这里有一种不同的方法可以尝试。页面一次加载150行。因此,我们不需要计算可见行的数量,而是使用我们期望的总匹配数/行数(例如4894),然后除以150得到需要滚动的次数。理论上,如果我们滚动至少这么多次,所有行都应该是可见的,我们可以继续代码。在

^{pr2}$

相关问题 更多 >