Webdriver не получает атрибут ® Драйвер Selenium - PullRequest
0 голосов
/ 06 января 2020

Привет! Я хотел бы получить символ ®, который будет распознан в python в файле, который я показал вам ниже

.get_attribute("href")

, но я пробовал много способов его декодировать и кодировать, но это не похоже на работу. Я подозреваю, что это сделано кодировкой UTF-8, но это не может быть декодировано. Дело в том, что код выглядит нормально, и я проверил все строки кода.

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
import csv

import time
url = 'https://shopee.com.my/search?keyword=mattress'

driver = webdriver.Chrome(executable_path=r'E:/users/Francabicon/Desktop/Bots/others/chromedriver.exe')
driver.get(url)
time.sleep(0.8)

# select language
driver.find_element_by_xpath('//div[@class="language-selection__list"]/button').click()
time.sleep(3)


# scroll few times to load all items 
def clickpy():
    for x in range(10):
        driver.execute_script("window.scrollBy(0,300)")
        time.sleep(0.1)

    # get all links (without clicking)

    all_items = driver.find_elements_by_xpath('//a[@data-sqe="link"]')

    all_urls = []

    s=["-Dr.Alstone-","-Dr.-Alstone-","-Lutfy-Paris-"]

    for item in all_items:
        # This give you whole url of the anchor tag
        url = item.get_attribute('href')
        if "-Dr.Alstone-" in url:
            continue
        else:
            if "-Dr.-Alstone-" in url:
                continue
            else:
                if "/Dr.Alstone-" in url:
                    continue
                else:
                    if "-Simoni-" in url:
                        continue
                    else:
                        if "-Lütfy-" in url:
                            continue
                        else:
                            # You need to remove the preceding values in order to verify href later for clicking
                            urlfinal=url.split('https://shopee.com.my')[1]
                            all_urls.append(c)
    print(all_urls)

    a= len(all_urls)

    print('len:' + str(a))

    # now use links
    i = 0
    j= a-5


    while i <= 4 :
        #Identify the parent tag by child tag use following Xpath.
        try:
            WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='col-xs-2-4 shopee-search-item-result__item' and @data-sqe='item'][.//a[@data-sqe='link' and @href='" + all_urls[i] +"']]"))).click()
            time.sleep(0.8)
            driver.back()
        except:
            print(all_urls[i] + "doesn't work")
            continue
        i+=1

    while j <= a :
        try:
            WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='col-xs-2-4 shopee-search-item-result__item' and @data-sqe='item'][.//a[@data-sqe='link' and @href='" + all_urls[i] +"']]"))).click()
            time.sleep(0.8)
            driver.back()
        except:
            print(all_urls[i] + "doesn't work")
            continue
        j+=1

clickpy()

Могу ли я что-нибудь сделать?

1 Ответ

2 голосов
/ 06 января 2020

Вы анализируете страницу HTML, поэтому все символы будут в формате URL encoded UTF-8. Вы можете использовать urllib.parse.unquote (для Python 3) для декодирования этих экранированных символов URL.

https://shopee.com.my/LOVOC-%C2%AE-OORIGINAL-Nordic-Sweden-Single-Mattress-(Comfort-in-a-box-Latex-Pocket-Spring-Sweden-Technology-Mattress)-i.132909000.2627476005

Выше приведен один из URL, который содержит ® из вашего примера , %C2%AE - это кодированный формат для ®.

Код:

import urllib.parse
url = 'https://shopee.com.my/LOVOC-%C2%AE-OORIGINAL-Nordic-Sweden-Single-Mattress-(Comfort-in-a-box-Latex-Pocket-Spring-Sweden-Technology-Mattress)-i.132909000.2627476005'
url_decoded = urllib.parse.unquote(url)
print(url_decoded)

Вывод:

https://shopee.com.my/LOVOC-®-OORIGINAL-Nordic-Sweden-Single-Mattress-(Comfort-in-a-box-Latex-Pocket-Spring-Sweden-Technology-Mattress)-i.132909000.2627476005

Надеюсь, это поможет вам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...