使用selenium python滚动并查找元素
我想滚动web WhatsApp的联系人并单击特定联系人。我可以滚动联系人,但无法找到获取特定联系人的特定元素,因为HTML是动态的,当我滚动联系人时,它会发生更改。 代码如下:使用selenium python滚动并查找元素,python,python-3.x,selenium,selenium-webdriver,Python,Python 3.x,Selenium,Selenium Webdriver,我想滚动web 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].scroll
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编写类似代码时,睡眠(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查找所需元素,并在其可见时单击它 谢谢你的回复,但实际上,该元素本身是不可点击的。如果找到该元素,我需要在该元素附近单击。当我使用
elem=WebDriverWait(driver,10)。直到(EC.presence_of_element_located((By.xpath,//span[@title=“Prakash Sharma”))
然后它也会不断滚动。这甚至不需要等待元素。这是一个我可以看到元素的公共网站吗?使用EC,你可以移动到一个元素,只需发送一次单击,而不是显式单击该元素。但是,在看不到HTML的情况下,我很难帮助编写所需的selenium代码。是的,这是一个公共网站,但你还需要在手机上安装WhatsApp应用程序并登录。这是一个社交媒体消息网站。哦,明白了。如果它仍然不起作用,我可能会进一步提供帮助。你有没有收到任何错误,或者只是没有找到元素?我在原始答案中犯了一个错误,并让EC.element可点击,但我认为nk使用thing=wait.until(EC.visibility_of_element_located(By.XPATH,“XPATH”))可能会更幸运,因为该函数上的文档状态是,当元素同时呈现且高度/宽度>0时,返回true