Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.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
Python Selenium从特定div查找元素_Python_Selenium - Fatal编程技术网

Python Selenium从特定div查找元素

Python Selenium从特定div查找元素,python,selenium,Python,Selenium,这段代码在您查看图片时获取svg(游戏记录)。但是,如果你点击我在底部的图片上写了“multi”的按钮,我也可以在页面右侧看到记录。我发现这部分比以前更快地显示记录。为了做到这一点,我必须只从那个div中获取svg值。我怎么能呢?请帮帮我 第二种方法不是更快,而且更难实现,因为每个容器都是单独装载的,并且在第一次装载完成后开始重新装载。自动化看起来像一场噩梦 我尝试了Selenium的显式等待和时间。sleep()两种方法都不起作用。 下面的代码单击按钮,切换到新的iframe并尝试获取容器内容

这段代码在您查看图片时获取svg(游戏记录)。但是,如果你点击我在底部的图片上写了“multi”的按钮,我也可以在页面右侧看到记录。我发现这部分比以前更快地显示记录。为了做到这一点,我必须只从那个div中获取svg值。我怎么能呢?请帮帮我


第二种方法不是更快,而且更难实现,因为每个容器都是单独装载的,并且在第一次装载完成后开始重新装载。自动化看起来像一场噩梦

我尝试了Selenium的显式等待和时间。sleep()两种方法都不起作用。 下面的代码单击按钮,切换到新的iframe并尝试获取容器内容。但由于上述原因,内容几乎总是空的

from selenium import webdriver
import time
from bs4 import BeautifulSoup
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


driver = webdriver.Chrome(executable_path='/snap/bin/chromium.chromedriver')
driver.get('http://ggl-maxim.com/')

driver.find_element_by_xpath('//*[@id="body"]/div/div[2]/div/div[2]/fieldset/input[1]').send_keys('tnrud3080')
driver.find_element_by_xpath('//*[@id="body"]/div/div[2]/div/div[2]/fieldset/input[2]').send_keys('tnrud3080')
driver.find_element_by_xpath('//*[@id="body"]/div/div[2]/div/div[2]/fieldset/button[1]').click()

time.sleep(2)
driver.get('http://ggl-maxim.com/api/popup/popup_menu.asp?mobile=0&lobby=EVOLUTION')
wait = WebDriverWait(driver, 30)
wait.until(EC.frame_to_be_available_and_switch_to_it("gameIframe"))
wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, ".svg--1nrnH")))
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span[data-role=button-label]"))).click()

wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".sidebar-container>iframe")))
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".sidebar-container")))
iframe2 = driver.find_element_by_css_selector('iframe[src^="https://evo.kplaycasino.com/frontend/evo/r2/"]')
driver.switch_to.frame(iframe2)
# wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".list--BLuiJ .svg--1nrnH")))
time.sleep(20)
targets = driver.find_elements_by_css_selector(".list--BLuiJ .svg--1nrnH")
res = []
for el in targets:
    res.append(el.get_attribute('innerHTML'))
print(*res, sep='\n')
如您所见,即使20秒也不够,因为内容正在动态重新加载

我留下了明确的等待评论,所以你可以放心,它不会工作得很好

但是,从我的回答中,您可以了解如何找到以特定文本开头的定位器:

iframe2 = driver.find_element_by_css_selector('iframe[src^="https://evo.kplaycasino.com/frontend/evo/r2/"]')

其中,
src^=
表示src以某些指定文本开头。

检查答案。我不推荐用这种方法来解决这项任务。
iframe2 = driver.find_element_by_css_selector('iframe[src^="https://evo.kplaycasino.com/frontend/evo/r2/"]')