Selenium find_element_by_xpath.click () не активирует html, но делает это вручную? - PullRequest
0 голосов
/ 25 мая 2020

Я просматриваю веб-страницу (https://www.tandfonline.com/toc/icbi20/current), и эта страница позволяет вам перемещаться по томам, и каждый том имеет свою собственную навигацию по проблемам. У меня проблемы с получением ссылок из раздела "Навигация по проблемам".

Я хочу: # 1 получить ссылки на том, # 2 пройтись по страницам, на которые ссылки ссылаются на # 3, получить ссылки href проблемы, я могу 't:

import requests, re, time
from bs4 import BeautifulSoup, SoupStrainer
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()
url_chronobiology = driver.get("https://www.tandfonline.com/toc/icbi20/current")
chronobiology_content = driver.page_source
chronobiology_soup = BeautifulSoup(chronobiology_content)

FLAGS = FLAGS = re.VERBOSE | re.DOTALL | re.IGNORECASE | re.MULTILINE

volume_tag = chronobiology_soup.select('#tocList > div > div > div.volume-container > div > div > div')

vol_href = []

for vol in volume_tag:
    i = str(vol)
    vol_href = re.findall(r"((?<=href=\")\/action\/\w+\?\w+\=\w+\&\w+\;\w+\=\w+\-\d{1,})", i, flags = FLAGS)
#This is because for some reason when parsing & is translated to -> &amp; and will not make for functional url's
vol_href = ' '.join(vol_href).replace('amp;','').split()
time.sleep(8)
driver.close()

#Function for getting each Issue link for each Volume:

def search_vol(vol_link):
    year_href = []
    #get the volume page
    vol_year = 'https://www.tandfonline.com' + str(vol_link)
    #get the volume page content
    driver = webdriver.Chrome()
    url_vol_year = driver.get(vol_year)
    chrono_content = driver.page_source
    chrono_soup = BeautifulSoup(chrono_content)

    #give it some time to load for the actionChains to work
    time.sleep(8)
    action=ActionChains(driver)
    action.move_to_element(driver.find_element_by_xpath('//*[@id="tocList"]/div/div/div[3]/div[2]/div/div')).perform()

    time.sleep(2)

    #selects the issues and creates a list with their href links
    a_tag = chrono_soup.select('#tocList > div > div > div.yearContent.open > div.issues > div > div')
    print(a_tag)
    for tag in a_tag:
        i = str(tag)
        year_href = re.findall(r"((?<=href=\")\/toc\/\w+\/\d{1,}\/\d{1,}\?\w+[=]\w+)", i, flags = FLAGS)
        for a in year_href:
            print(a)
    time.sleep(4)
    driver.close()
#Finally I iterate through every volume link:
for i in vol_href:
    search_vol(i)

Это [Out]: Я получаю:


[]
[<div class="loi-issues-scroller">
<a class="open" href="/toc/icbi20/36/12?nav=tocList">Issue<span>12</span></a>
<a class="" href="/toc/icbi20/36/11?nav=tocList">Issue<span>11</span></a>
<a class="" href="/toc/icbi20/36/10?nav=tocList">Issue<span>10</span></a>
<a class="" href="/toc/icbi20/36/9?nav=tocList">Issue<span>9</span></a>
<a class="" href="/toc/icbi20/36/8?nav=tocList">Issue<span>8</span></a>
<a class="" href="/toc/icbi20/36/7?nav=tocList">Issue<span>7</span></a>
<a class="" href="/toc/icbi20/36/6?nav=tocList">Issue<span>6</span></a>
<a class="" href="/toc/icbi20/36/5?nav=tocList">Issue<span>5</span></a>
<a class="" href="/toc/icbi20/36/4?nav=tocList">Issue<span>4</span></a>
<a class="" href="/toc/icbi20/36/3?nav=tocList">Issue<span>3</span></a>
<a class="" href="/toc/icbi20/36/2?nav=tocList">Issue<span>2</span></a>
<a class="" href="/toc/icbi20/36/1?nav=tocList">Issue<span>1</span></a>
</div>]
/toc/icbi20/36/12?nav=tocList
/toc/icbi20/36/11?nav=tocList
/toc/icbi20/36/10?nav=tocList
/toc/icbi20/36/9?nav=tocList
/toc/icbi20/36/8?nav=tocList
/toc/icbi20/36/7?nav=tocList
/toc/icbi20/36/6?nav=tocList
/toc/icbi20/36/5?nav=tocList
/toc/icbi20/36/4?nav=tocList
/toc/icbi20/36/3?nav=tocList
/toc/icbi20/36/2?nav=tocList
/toc/icbi20/36/1?nav=tocList
[<div class="loi-issues-scroller">
<a class="open" href="/toc/icbi20/35/12?nav=tocList">Issue<span>12</span></a>
<a class="" href="/toc/icbi20/35/11?nav=tocList">Issue<span>11</span></a>
<a class="" href="/toc/icbi20/35/10?nav=tocList">Issue<span>10</span></a>
<a class="" href="/toc/icbi20/35/9?nav=tocList">Issue<span>9</span></a>
<a class="" href="/toc/icbi20/35/8?nav=tocList">Issue<span>8</span></a>
<a class="" href="/toc/icbi20/35/7?nav=tocList">Issue<span>7</span></a>
<a class="" href="/toc/icbi20/35/6?nav=tocList">Issue<span>6</span></a>
<a class="" href="/toc/icbi20/35/5?nav=tocList">Issue<span>5</span></a>
<a class="" href="/toc/icbi20/35/4?nav=tocList">Issue<span>4</span></a>
<a class="" href="/toc/icbi20/35/3?nav=tocList">Issue<span>3</span></a>
<a class="" href="/toc/icbi20/35/2?nav=tocList">Issue<span>2</span></a>
<a class="" href="/toc/icbi20/35/1?nav=tocList">Issue<span>1</span></a>
</div>]
/toc/icbi20/35/12?nav=tocList
/toc/icbi20/35/11?nav=tocList
/toc/icbi20/35/10?nav=tocList
/toc/icbi20/35/9?nav=tocList
/toc/icbi20/35/8?nav=tocList
/toc/icbi20/35/7?nav=tocList
/toc/icbi20/35/6?nav=tocList
/toc/icbi20/35/5?nav=tocList
/toc/icbi20/35/4?nav=tocList
/toc/icbi20/35/3?nav=tocList
/toc/icbi20/35/2?nav=tocList
/toc/icbi20/35/1?nav=tocList
[]
[]

Когда открывается новое окно и в строке поиска написано «данные;» Я буду щелкать пустое окно, пока не появится загруженная страница, а затем еще раз щелкну пустую страницу. Если все сделано правильно, то по какой-то причине Проблема HTML станет узнаваемой по красивому супу?

Не понимаю, чего не хватает в коде или что происходит!

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