我想滚动网络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时没有加载,所以有没有解决方案?
答案 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会查找所需的元素并立即单击它是可见的。