Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用selenium python滚动并查找元素_Python_Python 3.x_Selenium_Selenium Webdriver - Fatal编程技术网

使用selenium python滚动并查找元素

使用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

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