Записывать в текстовый файл, но он не будет писать, если не будет продублировано.Python 3.7 ChromeDriver BS4 - PullRequest
0 голосов
/ 19 декабря 2018

Этот код работал 4-5 часов назад, и теперь он дублирует то, что я хочу записать в файл.Очевидными вещами, которые я пробовал, было закомментировать строки file.write или строку печати под ним, что привело к пустому текстовому файлу.Я пробовал с открытой строкой различные параметры, такие как +, a, w и w +, когда закомментировал одну из 2 вышеупомянутых строк, и она все еще пуста.Надеюсь, кто-нибудь может выяснить, где я напутал, и помочь мне исправить проблему.

Еще один вопрос, который у меня есть, - как мне перейти к следующей главе после копирования текущей, но если мне нужно сделатьНовый вопрос для этого я буду.Также, если у вас есть какие-либо предложения по улучшению кода, за исключением определений, которые я добавлю позже (после того, как скрипт будет выполнен), дайте мне знать.

Вот код на данный момент ::

#! python3
import requests
import bs4 as BeautifulSoup
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.chrome.options import Options

def Close():
    driver.stop_client()
    driver.close()
    driver.quit()

CHROMEDRIVER_PATH = 'E:\Downloads\chromedriver_win32\chromedriver.exe'

# start raw html
NovelName = 'Novel/Isekai-Maou-to-Shoukan-Shoujo-Dorei-Majutsu'
BaseURL = 'https://novelplanet.com/'
url = '%(U)s/%(N)s' % {'U': BaseURL, "N": NovelName}

options = Options()
options.add_experimental_option("excludeSwitches",["ignore-certificate-errors"])
options.add_argument("--headless") # Runs Chrome in headless mode.
options.add_argument('--no-sandbox') # Bypass OS security model
options.add_argument('--disable-gpu')  # applicable to windows os only
options.add_argument('start-maximized') # 
options.add_argument('disable-infobars')
options.add_argument("--disable-extensions")
driver = webdriver.Chrome(CHROMEDRIVER_PATH, options=options)
driver.get(url)

# wait for title not be equal to "Please wait 5 seconds..."
wait = WebDriverWait(driver, 10)
wait.until(lambda driver: driver.title != "Please wait 5 seconds...")

soup = BeautifulSoup.BeautifulSoup(driver.page_source, 'html.parser')
# End raw html

# Start get first chapter html coded
i=0
for chapterLink in soup.find_all(class_='rowChapter'):
    i+=1
cLink = chapterLink.find('a').contents[0].strip()
print(driver.title)
# end get first chapter html coded

# start navigate to first chapter
link = driver.find_element_by_link_text(cLink)
link.click()
# end navigate to first chapter

# start copy of chapter and add to a file
wait = WebDriverWait(driver, 10)
wait.until(lambda driver: driver.title != "Please wait 5 seconds...")
print(driver.title)
soup = BeautifulSoup.BeautifulSoup(driver.page_source, 'html.parser')
readables = soup.find(id='divReadContent')
text = readables.text.strip().replace('○','0').replace('×','x').replace('《',' <<').replace('》','>> ').replace('「','"').replace('」','"')
name = driver.title
file_name = (name.replace('Read ',"").replace(' - NovelPlanet',"")+'.txt')
print(file_name)

with open(file_name,'a+') as file:
    print(text,file=file)

lastURL = driver.current_url.replace('https://novelplanet.com','')
# end copy of chapter and add to a file

# start goto next chapter if exists then return to copy chapter else Close()

# end goto next chapter if exists then return to copy chapter else Close()

Close()
#EOF

Редактировать: измененный код, чтобы использовать предложенное ниже.Мне потребовалось около часа, чтобы понять, что вы можете использовать с ним модификаторы, учитывая, что в документах не было этой информации, поэтому я и отклонился от простого пути.

Теперь, чтобы выяснить, как ориентироватьсяна страницах есть 6 из <div class="4u 12u(small)">, 2-й и 5-й - это комбинированные списки / опции, которые, я сомневаюсь, будут простыми в использовании.1-я и 4-я - предыдущие главы, а 3-я и 6-я - следующие главы.Когда предыдущей или следующей кнопке некуда идти, они говорят <div class="4u 12u(small)">&nbsp;</div>.Кто-нибудь знает способ выборочного выбора 3-й или 6-й кнопки из всех 6 вариантов, а также способ убить программу, когда достигнут конец?

...