Sah*_*heb 7 python selenium selenium-webdriver
我有一个动态页面,当用户向下滚动页面时加载产品.我想获得在显示页面上呈现的产品总数.目前我正在使用以下代码到底,直到显示所有产品.
elems = WebDriverWait(self.driver, 30).until(EC.presence_of_all_elements_located((By.CLASS_NAME, "x")))
print len(elems)
a = len(elems)
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(4)
elem1 = WebDriverWait(self.driver, 30).until(EC.presence_of_all_elements_located((By.CLASS_NAME, "x")))
b = len(elem1)
while b > a:
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(4)
elem1 = WebDriverWait(self.driver, 30).until(EC.presence_of_all_elements_located((By.CLASS_NAME, "x")))
a = b
b = len(elem1)
print b
Run Code Online (Sandbox Code Playgroud)
这很好用,但我想知道是否有更好的选择呢?
您可以使用此行代码轻松执行此操作
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
Run Code Online (Sandbox Code Playgroud)
如果你想向下滚动,你应该试试这个.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Firefox()
driver.get("https://twitter.com/BarackObama")
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(3)
Run Code Online (Sandbox Code Playgroud)
我不能肯定time.sleep(x值)原因加载数据我需要更长的时间..以下..了解更多信息请查看官方文档页面
玩得开心 :)
我认为你可以将你的代码压缩为:
prior = 0
while True:
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
current = len(WebDriverWait(self.driver, 30).until(EC.presence_of_all_elements_located((By.CLASS_NAME, "x"))))
if current == prior:
return current
prior = current
Run Code Online (Sandbox Code Playgroud)
我通过将所有相同的行移至循环中来消除所有相同的行,这需要将循环设为 awhile True:
并将条件检查移至循环中(因为不幸的是,Python 缺少 any do-while
)。
我还扔掉了 sleep 和 print 语句 - 我不确定它们的目的是什么,但在我自己的页面上,我发现无论我是否在滚动之间休眠,都会加载相同数量的元素。此外,就我自己而言,我不需要知道任何时候的计数,我只需要知道它何时用完列表(但我添加了一个返回变量,这样如果你碰巧你可以得到最终的计数)如果您确实想打印中间计数,则可以在循环中分配后立即打印当前计数。
归档时间: |
|
查看次数: |
20873 次 |
最近记录: |