用Selenium和Python在iframe内显示图片的src

0 人关注

我正试图用Python和Selenium从shapeNet上自动下载一张图片。我快成功了,但最后一步却让我无从下手。

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.socks", "yourproxy")
profile.set_preference("network.proxy.socks_port", number_of_port)
#browser = webdriver.Firefox(firefox_profile=profile)
browser = webdriver.Firefox()
browser.get('https://www.shapenet.org/taxonomy-viewer')
#Page is long to load
wait = WebDriverWait(browser, 30)
element = wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='02958343_anchor']")))
linkElem = browser.find_element_by_xpath("//*[@id='02958343_anchor']")
linkElem.click()
#Page is also long to display iframe
element = wait.until(EC.element_to_be_clickable((By.ID, "model_3dw_bcf0b18a19bce6d91ad107790a9e2d51")))
linkElem = browser.find_element_by_id("model_3dw_bcf0b18a19bce6d91ad107790a9e2d51")
linkElem.click()
#iframe slow to be displayed
wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID, 'viewerIframe')))

直到现在,一切都运行得很顺利,我们进入了iframe。下一行可以工作,但我必须使用time.sleep()来使其工作,这略显丑陋,但我不知道有什么替代方法,这不是我问题的核心。

import time
#does not work have to use time.sleep
#element = wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[3]/div[3]/h4")))
time.sleep(20)
linkElem = browser.find_element_by_xpath("/html/body/div[3]/div[3]/h4")
linkElem.click()

现在我想下载一个刚刚在我的点击下打开的折叠菜单中显示的图片,所以我用developer工具找到了它的xpath。

img = browser.find_element_by_xpath("/html/body/div[3]/div[3]/div/div/div/span/img")
src = img.get_attribute('src')

现在它可以访问img,但src却没有,直到我在网页上手动点击。为什么会这样?我做错了什么?

PS:最后一步将是。

os.system("wget %s --no-check-certificate"%src)
    
javascript
python
selenium
iframe
jeandut
jeandut
发布于 2018-01-20
1 个回答
undetected Selenium
undetected Selenium
发布于 2018-01-20
已采纳
0 人赞同