Распознавание перенаправляющих ссылок в Selenium Python - PullRequest
0 голосов
/ 26 июня 2018

Мой код в настоящее время анализирует веб-сайт и определяет, ссылаются ли какие-либо ссылки на веб-сайте на другой введенный пользователем веб-сайт. Однако на некоторых веб-сайтах есть ссылки, которые косвенно перенаправляют на пользовательский веб-сайт.

Например, если я ищу McDonalds, на Yelp ссылка на веб-сайт McDonalds будет

https://www.yelp.com/biz_redir?url=https%3A%2F%2Fwww.mcdonalds.com%2Fus%2Fen-us%2Fbig-mac-trio.html%3Fcid%3DPS%3AGCM_MOP%3ANB%3A%3AYelp%3AAll&website_link_type=website&src_bizid=QjISg1yoC-NAgtK_FIMynA&cachebuster=1530033657&s=d20e56f50c3e547682eb388c95d45065502248fb9116df313e2d6ee078f1ce48

пока моя программа ищет www.mcdonalds.com.

Другим примером могут быть ссылки bit.ly, которые косвенно перенаправляют на сайт.

Вот мой код для справки

ef search(web):
#Clicks on the site
site = web.get_attribute("href")
driver.execute_script("window.open('');")
driver.switch_to.window(driver.window_handles[-1])
driver.get(site)

#Wait until the webpage has loaded
try:
    start = datetime.now()
    element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, "body")))

    #Gets the parsed url
    parsed_uri = urlparse(driver.current_url)
    domain = strip('{uri.scheme}://{uri.netloc}/'.format(uri=parsed_uri))
    #If it's taking too long, say it didn't load
    if(tooLong(start, datetime.now())):
        driver.execute_script("window.close('');")
        driver.switch_to.window(driver.window_handles[0])
        return site + " could not load"
    #If it's the same website, return nothing to add to the list
    if domain == URL:
        driver.execute_script("window.close('');")
        driver.switch_to.window(driver.window_handles[0])
        return ''
    #Else, search all links for the desired website
    else:
        elems = driver.find_elements_by_tag_name('a')
        for i in elems:
            newURI = urlparse(i.get_attribute("href"))
            check = strip('{uri.scheme}://{uri.netloc}/'.format(uri=newURI))
            print(check)
            #If it links back to the website, return nothing to add to the list
            if check == URL:
                driver.execute_script("window.close('');")
                driver.switch_to.window(driver.window_handles[0])
                return ''
            #If it's taking too long, say it couldn't load
            if(tooLong(start, datetime.now())):
                driver.execute_script("window.close('');")
                driver.switch_to.window(driver.window_handles[0])
                return site + " could not load"
    #If nothing is found, return the name of the website
    driver.execute_script("window.close('');")
    driver.switch_to.window(driver.window_handles[0])
    return site
#If the website doesn't load, flag it
except TimeoutException as ex:
    driver.execute_script("window.close('');")
    driver.switch_to.window(driver.window_handles[0])
    return site + " could not load"

Спасибо за любую помощь!

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