回答編集履歴

2

コメント受けて追記

2019/10/01 00:27

投稿

shirai
shirai

スコア1290

test CHANGED
@@ -149,3 +149,33 @@
149
149
  ```
150
150
 
151
151
  5回読み込んだら終了、かつ、DOMをbsではなく直接Seleniumで取得してみました。
152
+
153
+
154
+
155
+ ### さらに追記
156
+
157
+ まさにその通りですね。その配下にaタグは存在しないのでNoSuchElementExceptionが起きてます。
158
+
159
+ for文だけ変えてみましょう。
160
+
161
+
162
+
163
+ ```python
164
+
165
+ from selenium.common.exceptions import NoSuchElementException
166
+
167
+
168
+
169
+ for li_tag in driver.find_elements_by_class_name('p-list-item'):
170
+
171
+ try:
172
+
173
+ a_tag = li_tag.find_element_by_tag_name('a')
174
+
175
+ print(a_tag.text, a_tag.get_attribute('href'))
176
+
177
+ except NoSuchElementException:
178
+
179
+ pass
180
+
181
+ ```

1

コメント受けて追記

2019/10/01 00:27

投稿

shirai
shirai

スコア1290

test CHANGED
@@ -65,3 +65,87 @@
65
65
  自動で次のDOMが読み込まれるタイプの時の解です。
66
66
 
67
67
  ご参考までに
68
+
69
+
70
+
71
+ ### コメント受けて追記
72
+
73
+ ではこんな感じでいかがでしょうか。
74
+
75
+ ```python
76
+
77
+
78
+
79
+ driver.get('https://www.yomiuri.co.jp/editorial/')
80
+
81
+
82
+
83
+ # POPが出そうな時間まで待つ
84
+
85
+ time.sleep(10)
86
+
87
+
88
+
89
+ # 左下のPOPが出ていたら取り除く
90
+
91
+ try:
92
+
93
+ driver.execute_script('document.getElementById(\'yolyp_popup\').remove()')
94
+
95
+ except Exception:
96
+
97
+ pass
98
+
99
+
100
+
101
+ # 画面下のPOPが出ていたら取り除く
102
+
103
+ try:
104
+
105
+ driver.execute_script('document.getElementById(\'js-footer-global-guide\').remove()')
106
+
107
+ except Exception:
108
+
109
+ pass
110
+
111
+
112
+
113
+ for _ in range(5):
114
+
115
+
116
+
117
+ # 画面サイズを最大まで拡大
118
+
119
+ driver.execute_script('scrollTo(1282, document.body.scrollHeight)')
120
+
121
+
122
+
123
+ # さらに読み込むをクリック
124
+
125
+ driver.execute_script('document.getElementById(\'ajax_more_button\').click()')
126
+
127
+
128
+
129
+ # 3秒待機
130
+
131
+ time.sleep(3)
132
+
133
+
134
+
135
+ for li_tag in driver.find_elements_by_class_name('p-list-item'):
136
+
137
+ a_tag = li_tag.find_element_by_tag_name('a')
138
+
139
+ print(a_tag.text, a_tag.get_attribute('href'))
140
+
141
+
142
+
143
+ # 終了処理
144
+
145
+ driver.quit()
146
+
147
+ exit()
148
+
149
+ ```
150
+
151
+ 5回読み込んだら終了、かつ、DOMをbsではなく直接Seleniumで取得してみました。