Как найти и щелкнуть ссылку на изображение, используя src изображения (Selenium, Python) - PullRequest
0 голосов
/ 15 мая 2019

Я бы хотел щелкнуть ссылку на изображение, и мне нужно найти его по src, но по какой-то причине он все еще не работает.Это вообще возможно?Вот что я пытаюсь:

#Find item
item = WebDriverWait(driver, 100000).until(EC.presence_of_element_located((By.XPATH, "//img[@src=link]")))
#item = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//img[@alt='Bzs36xl9 xa']")))
item.click()

link = //assets.supremenewyork.com/170065/vi/BZS36xl9-xA.jpg в приведенном выше коде.Это соответствует HTML снизу.Второй локатор работает (поиск изображения с помощью alt), но у меня будет только источник изображения, когда программа действительно запускается.

HTML для веб-страницы:

<article>
   <div class="inner-article">
      <a style="height:81px;" href="/shop/accessories/h68lyxo2h/llhxzvydj">
         <img width="81" height="81" src="//assets.supremenewyork.com/170065/vi/BZS36xl9-xA.jpg" alt="Bzs36xl9 xa">
      </a>
   </div>
</article>

Я не понимаю, почему поиск по alt сработал бы, а не по src, возможно ли это?Я видел другой подобный вопрос, где я получил свое решение, но оно не сработало для меня.Заранее спасибо.

РЕДАКТИРОВАТЬ Чтобы найти ссылку, я должен проанализировать веб-сайт в формате JSON, вот код:

#Loads Supreme JSON website into an object
url = urllib2.urlopen('https://www.supremenewyork.com/mobile_stock.json')
obj = json.load(url)

items = obj["products_and_categories"]["Accessories"]

itm_name = "Sock"
index = 0;
for i in items:
        if(itm_name in items[index]["name"]):
                found_url = i["image_url"]
                break
        index += 1

str_link = str(found_url)
link = str_link.replace("ca","vi")

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Используйте WebDriverWait и element_to_be_clickable. Попробуйте следующий xpath. Надеюсь, это сработает.

link ='//assets.supremenewyork.com/170065/vi/BZS36xl9-xA.jpg'
item = WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='inner-article']/a/img[@src='{}']".format(link))))
print(item.get_attribute('src'))
item.click()
0 голосов
/ 15 мая 2019
item = WebDriverWait(driver, 100000).until(EC.presence_of_element_located((By.XPATH, "//img[@src=link]")))

Вот твоя проблема, я не могу поверить, что она не прыгнула на меня.Вы просите драйвер найти элемент с src "link", а не с переменной ссылкой, которую вы определили ранее.Я знаю, как передать переменные в xpath, но я знаю, что вы можете использовать stringFormat для создания правильной строки xpath непосредственно перед ее вызовом.

Я также не говорю на Python, поэтому вот некоторые псевдо-Java / C #, чтобы помочь вамполучить картину

String xPathString = String.Format("//img[@src='{0}']", link);
item = WebDriverWait(driver, 100000).until(EC.presence_of_element_located((By.XPATH, xPathString)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...