我正在尝试通过 selenium 和 python 进行一些网站测试。我确实填写了页面http://www.flightcentre.co.nz/并提交了表格。但现在搜索结果将我带到一个新页面,网址为 - https://secure.flightcentre.co.nz/eyWD/results 。我的网络驱动程序现在将如何处理这个问题?我是第一次这样做。任何人都可以通过提供示例来帮助我或向我指出此类正确的教程吗?
谢谢。
最佳答案
好吧,既然我试图回答你的另一个问题,我会尝试一下这个问题,尽管你没有完全解释你想要什么。
要记住的一件事是 Selenium 正在运行您的浏览器,而不是传统的网络抓取工具。这意味着如果 url 发生变化也没什么大不了的,唯一需要改变 Selenium 中抓取方式的时候是当你收到一个弹出窗口时。
您可以通过其他代码做的一件事是在寻找航类时执行
driver.implicitly_wait(40)//40 is the amount of seconds
这将在崩溃之前等待至少 40 秒,然后在页面加载完成或您接下来想要执行的任何操作在 dom 中处于事件状态时启动。
现在,如果您尝试抓取所有出现的航类数据,那将相当棘手。您可以执行 for 循环并抓取页面上的每个元素并将其写入 csv 文件。
class_for_departure_flight = driver.find_elements_by_xpath('//div[@class="iata"]')
for flights in class_for_departure_flight:
try:
with open('my_flights.csv', 'a', newline='') as flights_book:
csv_writer = csv.writer(flights_book, delimiter = ',')
csv_writer.writerow(flights.text)
except:
print("Missed a flight")
第二部分中需要注意的是我正在使用 Python 中的 CSV 库来写入数据行。您可以将一堆数据附加在一起并将其写为一行,如下所示:
data = (flights, dates, times)
csv_writer.writerow(data)
它会将电子表格中同一行上的所有不同内容进行校正。
另外两件容易被忽视的大事是:
class_for_departure_flight = driver.find_elements_by_xpath('//div[@class="iata"]')
即 driver.find_elements_by_xpath,您会注意到 elements 是复数,这意味着它正在查找具有相同 class_name 的多个对象,并将它们存储在一个数组中,以便您可以迭代在 for 循环中对它们进行遍历。
下一部分是 csv_writer.writerow(flights.text) 当你迭代你的航类时,你需要抓取文本来执行flights.text。如果您仅使用搜索功能来执行此操作,您也可以执行类似的操作。
class_for_departure_flight = driver.find_elements_by_xpath('//div[@class="iata"]').text
希望这有帮助!
关于javascript - 如何抓取页面的动态 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35376595/