Python Selenium:遍历动态元素



我确信以前可能有人问过这个问题,但我还没有遇到它。如果它已经在这里了,我很抱歉。然而,我在试图弄清楚逻辑时遇到了一个问题:页面以我想要点击的元素列表(开头20个(开始。滚动后,会显示更多相同的元素。我在滚动后与加载的元素交互时遇到问题。这就是我到目前为止所想到的:

def clix():
chazz = driver.find_elements_by_css_selector("button[class^='message-anywhere']")
for x in chazz:
if x.is_displayed():
x.click()
time.sleep(1)
driver.find_element_by_css_selector("button[data-control-name^='overlay.close']").click()
time.sleep(2)
scrollz()
def scrollz():
driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")
time.sleep(4)
clix()
clix()

我知道这并不是应该的"蟒蛇"或"最佳实践"。我只是担心功能。任何见解都将不胜感激。 driver.find_element_by_css_selector("button[data-control-name^='overlay.close']").click()按钮仅用于弹出窗口。

感谢

html:

<button class="message-anywhere-button artdeco-button artdeco-button--secondary artdeco-button--2" aria-label="Send message to Abarna Rajkumar" data-ember-action="" data-ember-action-63="63">
Chat
</button>

我认为只有一个函数可以解决您的问题。我可能错了,因为我没有正在测试的应用程序。

  • 诱导WebDiverWait并等待visibility_of_all_elements_located((
  • 迭代时使用location_once_scrolled_into_view,然后单击
  • 诱导WebDiverWait,等待element_to_be_clickable((点击关闭按钮

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def clix():
chazz =WebDriverWait(driver,20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,"button[class^='message-anywhere']")))
for x in range(len(chazz)):
chazz = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "button[class^='message-anywhere']")))
chazz[x].location_once_scrolled_into_view
chazz[x].click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"button[data-control-name^='overlay.close']"))).click()
clix()

chazz=driver.find_elements_by_css_selector("button[class^='message-anywhere']"(全局xxxx=0def clix((:全局xx打印(xx(chazz=driver.find_elements_by_css_selector("button[class^='message-anywhere']"(而xx<len(chazz(:打印(xx(

chazz[xx].click()
time.sleep(1)
driver.find_element_by_css_selector("button[data-control-name^='overlay.close']").click()
time.sleep(1)
xx = xx+1
driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")
xx = xx+1

i=0

while i < 1000:
clix()

如果我真的想把它发挥到无穷大。。。我只是把while循环设置为无法实现的东西。。。。而i&lt-1.狐狸的例子。

最新更新