使用selenium python

时间:2018-06-05 17:32:26

标签: 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时没有加载,所以有没有解决方案?

1 个答案:

答案 0 :(得分:1)

我发现在为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会查找所需的元素并立即单击它是可见的。