Selecting elements from the DOM of a page
Don't implicitly create global variables for (i = 0; uses a global i. Always declare variables before using them - in modern times, declare them with let or const, not var (which has too many problems, such as an unintuitive function scope rather than block scope, to be worth using nowadays)
Iterators Or, even better, rather than iterating manually, invoke the NodeList's iterator, and use for..of instead, eg:
for (const b of bs) {
  // do stuff with each &lt;b&gt; element
}

querySelector If you only want to select one element matching a selector, don't use querySelectorAll followed by [0] index lookup - use querySelector instead.
try/catch In predictable, synchronous code, there shouldn't be any need for try/catch. If you aren't sure whether an element exists, just test it first, instead of possibly throwing an error.
textContent Use textContent rather than innerHTML - textContent is faster and more appropriate when you aren't deliberately retrieving HTML markup. Also, .innerHTML gives you difficult HTML entities, as you can see with your Kleinberg &amp;amp; Tardos, instead of Kleinberg &amp; Tardos
Try something like this instead:
const bs = document.querySelectorAll(&quot;div.post-body.entry-content div h3 b&quot;);
for (const b of bs) {
  const child = b.querySelector('u, a');
  if (child) {
    console.log(child.textContent);
  }
}