python - 使用 selenium python 滚动并查找元素

标签 python python-3.x selenium selenium-webdriver

我想滚动 WhatsApp 网页版的联系人并单击特定联系人。我可以滚动联系人,但无法找到特定元素来获取特定联系人,因为 HTML 是动态的,当我滚动联系人时,它会发生变化。 这是代码:

target = '"name"'
panel = driver.find_element_by_class_name('_1NrpZ')
a = 0
while elem is None:
  a += 5
  try:
      driver.execute_script('arguments[0].scrollTop = %s' %a, panel)
      elem = driver.find_element_by_xpath('//span[@title=' + target + ']')
      time.sleep(5)
  except:
       pass

ac = ActionChains(driver)
ac.move_to_element(elem).click().perform()
time.sleep(2)

它不会停止并继续滚动,直到最后一次联系。我想当我滚动时新的 HTML 没有加载,所以有什么解决方案吗?

最佳答案

我发现在为 Selenium 编写类似代码时,time.sleep(x) 通常是问题所在。问题在于,它会暂停所有计算,并且往往弊大于利,至少根据我的经验。对于此类事情,我会尽可能使用预期条件。

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

wait = WebDriverWait(my_selenium_driver, 15)    
        my_button = wait.until(EC.element_to_be_clickable((By.XPATH,self._my_button_xpath))).click()

举个例子,您可以保留当前负责滚动列表的操作链并允许它这样做,但在滚动期间让 EC.wait 查找您想要的元素并在它出现后立即单击它是可见的。

关于python - 使用 selenium python 滚动并查找元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50705881/

相关文章:

Python 相当于 Ruby 的 ObjectSpace?

python - 两个日期时间之间的平均值;如果是 NaN,则获取最后一个非 NaN 值

python - 按行值过滤 pandas 数据框时出现问题?

c# - 仅使用 c# selenium 在元素的子元素中通过 xpath 查找

python - 所有可能的矩阵(列表列表)仅包含原始列表元素python中的元素

python - 在列表中查找值的索引

python - Kivy中为什么会出现解析异常?

python - 如何实现并行、延迟,使得并行 for 循环在输出低于阈值时停止?

python - 如何使用 Google App Engine 运行 Selenium 测试?

selenium - 有没有办法通过 Selenium/GhostDriver 查看 PhantomJS console.log 消息?