我想滚动 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/