2017-02-12 11 views
0

ho, чтобы получить URL-адрес от url-адреса, я имею в виду сам URL-адрес в стиле? Style =" width: 433px; высота: 510px; Фоновое изображение: URL (https://cs7056.vk.me/c635104/v635104607/1c316/ADzy-2WY8pw.jpg)»Selenium3 Python3 легко для васSelenium3 Python3 как получить URL-адрес из атрибута style = "background-image: ur, '" и есть URL-адрес "

import requests 
from bs4 import BeautifulSoup 
from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.common.keys import Keys 
from selenium.common.exceptions import NoSuchElementException 
from selenium.common.exceptions import NoAlertPresentException 
import re 
import time 


url = 'https://vk.com/uporols_you' 
driver       = webdriver.Firefox(executable_path='C:/Users/PANDEMIC/AppData/Local/Mozilla/geckodriver.exe') 

def login(driver): 
    log_page     = driver.get('https://login.vk.com/?act=login') 
    find_login_input   = driver.find_element_by_id('login_form').find_element_by_id('email').send_keys('+77782303865') 
    find_password_input   = driver.find_element_by_id('login_form').find_element_by_id('pass').send_keys('pass') 
    find_button     = driver.find_element_by_xpath('//button[@id="login_button"]').click() 
    time.sleep(5) 



def get_photo_from_page(driver): 
    driver.get(url) 
    try: 
     driver.find_element_by_class_name('popup_box_container').find_element_by_class_name('box_title_wrap').find_element_by_class_name('box_x_button').click() 
    except: 
     print('nope nothing') 

    for i in range(2): 
     scrol_down = driver.find_element_by_id('public_wall').find_element_by_id('wall_more_link').click() 
     time.sleep(2) 

    tut = [] 
    #t = (a[@class="page_post_thumb_wrap image_cover page_post_thumb_last_column page_post_thumb_last_row"]) 
    for ii in driver.find_elements_by_xpath('//a[@style]'): 
     o = ii.get_attribute('style') 
     print(o) 
    #soup = BeautifulSoup(htlm, 'lxml') 
    #im = soup.find_all('a', class_="'page_post_thumb_wrap image_cover page_post_thumb_last_column page_post_thumb_last_row'") 
    #print(htlm) 
    #for a in im: 
    # s = a.get('data-src_big').split('|')[0] 
    # tut.append(s) 
    #print(tut) 

    #for num, link in enumerate(tut, start=1): 
    # p = requests.get(link) 
    # out = open("img%s.jpg" % (num), 'wb') 
    # out.write(p.content) 
    # out.close() 


def main(): 
    login(driver) 
    get_photo_from_page(driver) 


if __name__ == '__main__': 
    main() 

ответ

1

В этом конкретном случае, можно просто разобрать строку стиля, что вы уже были в состоянии собрать с помощью сценария

Просто. добавить эту функцию в код:

def parse_style_attribute(style_string): 
    if 'background-image' in style_string: 
     style_string = style_string.split(' url("')[1].replace('");', '') 
     return style_string 
    return None 

Это простая строка синтаксический анализ, который извлечь URL, если есть «фоновое изображение» в строке, или не возвращать None, если нет изображений

.

Вы можете использовать его в вашем коде:

links = list() 
for ii in driver.find_elements_by_xpath('//a[@style]'): 
    o = ii.get_attribute('style') 
    links.append(parse_style_attribute(o)) 
links = [link for link in links if link is not None] 
+0

но как не удалить это [None, None, None, None, «https://pp.vk.me/c638718/v638718210/1b8a6/Fwbewm68Alg. jpg ', из этого' https://cs7056.vk.me/c635104/v635104607/105ca/AmvyePsSzyM.jpg ', –

+0

Вы можете использовать список, чтобы избавиться от None. См. Редактирование моего ответа. –